2016-09-20 9 views
1

Наше приложение подключается к устройствам Bluetooth LE через CoreBluetooth.CoreBluetooth на iOS10: Тайм-аут после CBPeripheral discoverServices

На iOS 8 и 9 все работает правильно. КСН 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; 

после вызова discoverServices на подключенном CBPeripheral.

Кто-нибудь знает, что происходит не так? Это проблема iOS 10? Есть ли определенный журнал BLE для проверки?

Настройка IOS 10.0.1 (14A403) на IPad Pro 9.7 с Nordic Semiconductor nRF51822

ответ

3

ОК, я решил проблему. Я перепутал CBUUID и NSUUID
, начинающийся с iOS 10 CBPeripheral discoverServices только принимает CBUUID. NSUUID больше не работает. Возможно, 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]; 

смотрит вперед портировать приложение сильно типизированных Swift.

+0

Спасибо, человек, которого вы меня спасли .. Стоит отметить, что если вы поместите NSUUID, он никогда не отправит сообщение об ошибке, что очень затрудняет отладку –

0

Убедитесь, что вы не позволяя CBPeripheral быть высвобождены прежде, чем peripheral:didDiscoverServices: называется в вашем CBCentralManagerDelegate. Это легко осуществить путем назначения периферии свойству, e. g .:

@property (nonatomic, string) CBPeripheral *peripheral; 

... 

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

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

Спасибо, но это не решает мою проблему, так как «CBPeripheral» поддерживается сильной ссылкой. – cornr