2013-09-23 2 views
8

Я пытаюсь использовать образец проекта Apple 'BTLE Transfer', чтобы понять программирование CoreBluetooth. Приложение работает нормально, если я использую устройство iOS 6 как Central, но если я запустил такое же приложение с устройством iOS 7, как и Central, это не сработает. Периферийное устройство прекращает отправку после двух пакетов, а центральный не получает ни одного из них.Изменения в CBCentralManager для iOS 7

Единственный ключ является это предупреждение, что я получаю только при работе на прошивке 7:

CoreBluetooth[WARNING] <CBCentralManager: 0x15654540> is disabling duplicate filtering, but is using the default queue (main thread) for delegate events 

Может кто-нибудь сказать мне, что нужно изменить, чтобы сделать это приложение совместимо с прошивкой 7?

EDIT: Когда оба устройства являются iOS7, проблем нет. Это происходит только тогда, когда центральный процессор iOS7 разговаривает с периферией iOS6.

ответ

8

Хорошо, я просто запустил его на iOS 7, центральном для периферии iOS 6. Если вы хотите, чтобы это предупреждение об отключении дублирования фильтрации исчезло, просто запустите его в другом потоке. Сделайте что-нибудь вроде этого:

dispatch_queue_t centralQueue = dispatch_queue_create("com.yo.mycentral", DISPATCH_QUEUE_SERIAL);// or however you want to create your dispatch_queue_t 
_centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:centralQueue]; 

Теперь это позволит вам сканировать с включенными дубликатами. Тем не менее, вы должны вызвать сеттер TextView на главном потоке, чтобы иметь возможность установить текст без сбоев:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self.textview setText:[[NSString alloc] initWithData:self.data encoding:NSUTF8StringEncoding]]; 
     }); 

Btw вы, вероятно, также хотят принять новый IOS инициализации 7 делегата:

_centralManager = [[CBCentralManager alloc]initWithDelegate:self queue:centralQueue options:nil];//set the restoration options if you want 

(Просто проверить версию IOS и вызвать соответствующий метод инициализации)

+0

Это устраняет предупреждение, но оно не устраняет проблему связи. По-видимому, это известная проблема при общении между iOS 6 и 7. –

5

в scanForPeripheralsWithServices:options:, если вы установите CBCentralManagerScanOptionAllowDuplicatesKey:@YES затем изменить его CBCentralManagerScanOptionAllowDuplicatesKey:@NO это означает, что сканирование должно работать без дубликатов фильта тч.

Для меня это работает и на iOS7.

Смежные вопросы