首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CBCentralManager没有开机

CBCentralManager没有开机
EN

Stack Overflow用户
提问于 2015-04-04 07:59:32
回答 2查看 1.9K关注 0票数 0
代码语言:javascript
运行
复制
_manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[NSThread sleepForTimeInterval:10]; // waiting for centralManagerDidUpdateState invocation
[_manager scanForPeripheralsWithServices:@[ _serviceUUID ] options:nil]; // warning here

...

- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
    NSLog(@"CBCentralManager state is %i", (int)central.state);
}

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
    NSLog(@"Found peripheral: %@", peripheral);
    ...
}

出于某种原因,委托centralManagerDidUpdateState从未被调用,我收到警告:

2015-04-04 12:59:20.850 xctest30276:303 CoreBluetoothWARNING没有开机

同时开始发现外设。AFAIK应该在OSX上工作(我是2013年工商管理硕士,和运行XCTest)。蓝牙是打开的,我可以运行LightBlue应用程序并发现一些BLE设备(我确信在测试我的代码时没有任何BLE应用程序正在运行)。因此,没有按预期调用didDiscoverPeripheral

EN

回答 2

Stack Overflow用户

发布于 2018-01-08 20:13:34

对于OSX10.13.2,CBCentralManager.init()的队列参数必须为非零才能触发回调,例如在Swift中

代码语言:javascript
运行
复制
manager = CBCentralManager(
  delegate: self,
  queue: DispatchQueue(label: "BT_queue"))
票数 2
EN

Stack Overflow用户

发布于 2015-04-04 08:07:39

我尝试使用背景线程作为sleepForTimeInterval阻塞主线程,而CBCentralManager默认使用主线程:

代码语言:javascript
运行
复制
dispatch_queue_t bt_queue = dispatch_queue_create("BT_queue", 0);
_manager = [[CBCentralManager alloc] initWithDelegate:self queue:bt_queue];

因此,几乎立即调用centralManagerDidUpdateState:,并使用didDiscoverPeripheral:发现外围设备。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29444090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档