我有一个页面,我可以搜索可用的设备(表格视图显示广告设备)并连接到它。特别是在那个页面上,我使用了核心蓝牙功能,一旦连接,我将连接外设的引用传递给我用于从任何页面执行任何蓝牙命令的单例类。除了设备断开连接外,一切正常。在我所做的单例对象类中,我在didDisconnect外设函数中放入了代码,以保留哪个设备断开连接以及重新扫描可用外设的参考。如果我找到一个断开连接的,我在didDiscoverPeripheral函数中重新连接。我还定义了7种不同的连接状态,我将其存储为NSUserDefaults中的标志。 '6'和'7'用于连接两个设备并且其中一个断开连接。 每当我使用自定义函数发送命令时,我都会执行检查以查看外设是否存在于参考数组中。如果不是我不发送命令。
以下是didDisconnectPeripheral函数的片段:
// If disconnected, start searching again
func centralManager(central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: NSError?) {
print("Disconnected")
if peripheral == self.easeDevice {
modeData.setObject(6, forKey: "ConnectionState")
modeData.synchronize()
connectedPeripheralArray.removeAtIndex(0)
central.scanForPeripheralsWithServices(nil, options: nil)
} else if peripheral == self.easeDevice2 {
modeData.setObject(7, forKey: "ConnectionState")
modeData.synchronize()
connectedPeripheralArray.removeAtIndex(1)
central.scanForPeripheralsWithServices(nil, options: nil)
}
}
以上我在单例对象类中所做的一切。我面临的问题是,当设备在任何特定页面上断开连接时,它不会转到单例中的didDisconnectPeripheral。 (由于单例包含所有蓝牙代码,我没有在每个ViewController类上导入CoreBluetooth模块和函数。相反,我只是调用我需要的东西)。如果我在每个页面上都定义了coreBluetooth功能,我可能会知道设备何时断开连接。所以目前,当我尝试编写命令时,应用程序崩溃,因为设备无法写入。有没有人找到一种方法来不断监视设备的断开?或者是一种更简化的简单方法来管理单例内的连接?欢迎任何相关见解