gpt4 book ai didi

core-bluetooth - CoreBluetooth 状态保存和恢复

转载 作者:行者123 更新时间:2023-12-04 04:27:22 26 4
gpt4 key购买 nike

我有以下场景:iOS 应用程序(外围)X OSX 应用程序(中央)

  • 我使用 CBPeripheralManagerOptionRestoreIdentifierKey 实例化我的外设管理器。
  • 在我的外围设备的 didFinishLaunchingWithOptions 中,我在获得带有 UIApplicationLaunchOptionsBluetoothPeripheralsKey 的外围设备后发送本地通知(不要对其执行任何操作)
  • 在我的外围设备的 willRestoreState 中,我也触发了一个通知(除此之外不要做任何事情)

如果我的外围应用程序在由于内存压力而被杀死之前仍在后台运行,我就可以很好地从 OSX Central 接收消息。

iOS 应用被终止后,当 OSX Central 发送一条消息时,上面提到的两个通知都会在 iOS 上通过,但我实际期望的消息并没有。

我在任何时候都没有重新实例化我的 peripheralManager,我应该在哪里以及如何重新实例化它?对于我的应用程序的整个周期,我只有一个 peripheralManager。

欢迎提出任何建议。

更新:

如果有

let options: Dictionary = [CBPeripheralManagerOptionRestoreIdentifierKey: "myId"]
peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: options)

在 willRestoreState 中,我的应用程序刚刚失去连接

最佳答案

是的,在重新访问了关于这个问题的所有主题 100 次之后我终于想通了,这就是它应该如何实现:

在 AppDelegate 的 didFinishLaunchingWithOptions 中:

if let options = launchOptions {
if let peripheralManagerIdentifiers: NSArray = options[UIApplicationLaunchOptionsBluetoothPeripheralsKey] as? NSArray {

//Loop through peripheralManagerIdentifiers reinstantiating each of your peripheralManagers
//CBPeripheralManager(delegate: corebluetooth, queue: nil, options: [CBPeripheralManagerOptionRestoreIdentifierKey: "identifierInArray"])

}
else {
//There are no peripheralManagers to be reinstantiated, instantiate them as you normally would
}
}
else {
//There is nothing in launchOptions, instantiate them as you normally would
}

此时,willRestoreState 应该开始被调用,但是,如果您有一个管理所有订阅了您的特征的中心,那么您的中心阵列中将没有中心。由于我所有的中心总是在我拥有的一项服务中订阅我的所有特征,我只是循环遍历任何特征中的所有订阅的中心,将它们重新添加到我的中心数组中。

请根据您的需要修改。

在 willRestoreState 中:

var services = dict[CBPeripheralManagerRestoredStateServicesKey] as! [CBMutableService]

if let service = services.first {

if let characteristic = service.characteristics?.first as? CBMutableCharacteristic {

for subscribedCentral in characteristic.subscribedCentrals! {
self.cbCentrals.append(subscribedCentral as! CBCentral)
}

}

}

在此之后,您应该可以调用您准备好的任何方法与任何中心对话,即使您同时处理其中的几个。

祝你好运!

关于core-bluetooth - CoreBluetooth 状态保存和恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32041073/

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