我一直在使用Xcode和Swift构建应用程序。该应用使用CoreBluetooth
与蓝牙低功耗设备连接。
该应用会扫描设备并将其列在tableView
中。如果找到的设备与正确的服务ID匹配,则会将其添加到设备阵列,因此会添加到tableView
,但是,我已经编写了应用程序,以便在检测到设备时没有广告数据中的正确服务ID,它不会添加到tableView
。因此,这意味着像这样的设备不是我想要连接的设备。
我一直在iPhone 6上测试应用程序,它会检测到正确的设备并将其添加到阵列tableView
,并且不会添加任何其他错误设备的设备。
但是,我似乎在iPad 3上遇到了应用程序问题。运行应用程序时,它会检测到正确的设备并将其添加到阵列tableView
。但是,当它检测到没有可用服务ID的设备时,它会崩溃,而不是不将其添加到列表中。
我使用的代码如下:
func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
if discoveredDeviceArray.contains(peripheral.name!) {
print("INFORMATION: Detected device \(peripheral.name!) but it already exists in the list. Skipping for now...")
} else {
if peripheral.name != nil { //Check to ensure that a nil device hasn't been detected - this otherwise will cause the app to crash.
if advertisementData.description.contains("FFB0"){
print("INFORMATION: Discovered \(peripheral.name!) and it was added to the list of detected test devices.")
discoveredDeviceArray.append(peripheral.name!)
discoveredDeviceArrayInfo.append(peripheral)
self.bluetoothTableView.reloadData()
} else {
print("WARNING: The device \(peripheral.name!) was discovered but not added to the list since it is not a test device.")
}
}
}
}
目前,当iPad检测到Macbook的蓝牙信号时,它会在iPad上崩溃。 iPhone检测到这一点很好,并且没有将其添加到列表中。
该应用程序在该行崩溃
self.bluetoothTableView.reloadData()
错误:
Thread 1: EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xe7ffdefe)
我认为这与centralManager
参数之一的advertisementData
参数不打开选项有关,但它让我感到惊讶,因为它似乎只发生在iPad上。
这里是否有任何代码可以看出显然是错误的,需要纠正?
提前致谢!