我有以下场景:iOS应用(外围设备)X OSX应用(中央)
如果我的外设应用程序在由于内存压力而被杀死之前仍在后台运行,我从OSX中心获取消息就好了。
在iOS应用程序被杀之后,当OSX中心发送消息时,上面提到的两个通知都在iOS上传出,但是我实际上期待的消息不是。
我没有随时重新提供我的外围设备管理器,我应该在哪里以及如何操作?我的应用程序的整个周期只有一个peripheralManager。
欢迎任何建议。
更新:
如果
name : Mission 1
Service offers labels : facelift, painting
date : 08/22/2015 2:00pm
在willRestoreState中,我的应用程序失去了连接
答案 0 :(得分:1)
是的,在重新讨论了有关此问题的所有主题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应该开始被调用,但是,如果您有一个管理所有订阅您的特征的中心,那么您的核心数组中将没有中心。由于我的所有中心总是在我所拥有的单一服务中订阅我的所有特征,因此我只需将所有subscribedCentral中的任何特征重新添加到我的中心数组中。
请根据您的需要进行修改。
在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)
}
}
}
在此之后你可以打电话给你准备与任何中心交谈的任何方法,即使你同时处理其中的几个。
祝你好运!