2016-09-20 40 views
1

我們的應用程序通過CoreBluetooth連接到藍牙LE設備。iOS10上的CoreBluetooth:CBPeripheral discoverServices後超時

在iOS 8和9上,一切正常。在iOS上10我們geht超時錯誤(Error Domain=CBErrorDomain Code=6 "The connection has timed out unexpectedly."
CBCentralManagerDelegate:

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(nullable NSError *)error; 

調用一個連接CBPeripheraldiscoverServices後。

有誰知道最新出錯了嗎?這是iOS 10的問題嗎?是否有某個BLE日誌需要檢查?

的iPad Pro的9.7安裝iOS版10.0.1(14A403)與Nordic半導體nRF51822

回答

3

好的,我解決了這個問題。我混了CBUUIDNSUUID
開始於iOS 10 CBPeripheral discoverServices只接受CBUUIDNSUUID不起作用了。也許NSUUID只適用於較舊的iOS版本。該文檔明確指出:

表示要發現的服務類型的CBUUID對象的列表。

NSArray *services = @[ 
    [CBUUID UUIDWithString:ServiceUUID] //Correct 
    //[[NSUUID alloc] initWithUUIDString:ServiceUUID] //Does work on iOS 9 but not on iOS 10 
]; 
[self.peripheral discoverServices:services]; 

期待端口的應用程序,以強類型的斯威夫特。

+0

謝謝你救了我..值得一提的是,如果你把NSUUID從不發送錯誤信息,這使得它很難調試 –

0

確保您不允許peripheral:didDiscoverServices:之前釋放的CBPeripheral叫你CBCentralManagerDelegate。這很容易通過將外設分配給一個屬性來完成, g .:

@property (nonatomic, string) CBPeripheral *peripheral; 

... 

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { 

    self.peripheral = peripheral 
    [peripheral discoverServices:<desired service UUIDs>]; 
    ... 
} 
+0

謝謝,但是這並不能解決我的問題,因爲'CBPeripheral'是由強大的參考文件保存的。 – cornr