gpt4 book ai didi

core-bluetooth - 从 iOS 7 升级到 iOS 8 后不调用 didDiscoverPeripheral

转载 作者:行者123 更新时间:2023-12-04 04:29:57 25 4
gpt4 key购买 nike

我正在从 AppDelegate 的 didFinishLaunchingWithOptions 回调中调用 scanForPeripheralsWithServices。代码如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSLog(@"didFinishLaunchingWithOptions");
// Override point for customization after application launch.
cm = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[cm scanForPeripheralsWithServices:nil
options:nil];
}

- (void) centralManager:(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral*)peripheral advertisementData:(NSDictionary*)advertisementData RSSI:(NSNumber*)RSSI{

NSLog(@"Did discover peripheral %@", peripheral.name);

[cm stopScan];
}

在升级到 iOS 8 之前,一切都运行良好,但是在升级之后(完全相同的代码,没有一行被更改)我没有收到任何错误,而且 didDiscoverPeripheral 也没有被调用。

最佳答案

我认为 iOS 8 中 Core Bluetooth 发生的主要变化是 BLE 堆栈在您尝试连接(或可能发出其他命令)之前不会启动。

CBCentralManager *cbCentralManager;
[cbCentralManager scanForPeripheralsWithServices:...];

此调用用于发出在 Xcode 调试日志中可见的警告,指出中央管理器需要先启动才能使用。然而,这个警告始终是一个陷阱 - 启动中央管理器的唯一方法是向它发送一条消息,而它处理消息的唯一方法是启动它。

Apple 似乎通过稍微不同地处理开机来解决了这个问题。现在,在发出上述命令后,中央管理器通过 centralManagerDidUpdateState: 告诉它的委托(delegate)它的状态发生了变化。

我们通过重新发出 scanForPeripherals... 消息响应 centralManagerDidUpdateState: 解决了您描述的问题。

关于core-bluetooth - 从 iOS 7 升级到 iOS 8 后不调用 didDiscoverPeripheral,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25965357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com