Избегайте обнаружения служб и характеристик при повторном подключении в CoreBluetooth.

Я работаю над приложением менеджера CoreBluetooth для iPhone. Чтобы иметь возможность повторно подключиться к ранее обнаруженному CBPeripheral, я сохраняю UUID периферийного устройства (в CoreData), а затем вызываю функцию CBCentralManager retrievePeripherals:. Мой didRetrievePeripherals: вызывается обратный вызов, и я могу подключиться и т. д. Пока все хорошо.

Поскольку я повторно подключаюсь к периферийному устройству, о котором я уже знаю, я хотел бы избежать обнаружения его услуг и характеристик. Поэтому я сохраняю UUID сервисов и характеристик (опять же в CoreData вместе с UUID периферийного устройства) при первом подключении.

Но я не могу использовать эти UUID для чтения или записи характеристик, потому что CBPeripheral readValueForCharacteristic: или writeValueForCharacteristic: принимает CBCharacteristic в качестве параметра, а API для создания экземпляра CBCharacteristic отсутствует.

Есть ли способ избежать обнаружения служб и характеристик при повторном подключении к ранее известному периферийному устройству?


person mezulu    schedule 24.10.2012    source источник
comment
Здравствуйте, поскольку вы сохраняете UUID известных устройств в CoreData, не могли бы вы просто сохранить структуру данных для каждого устройства, содержащую службы и характеристики, которые они реализуют?   -  person Acacio Martins    schedule 26.10.2012
comment
Услуги и характеристики устройства идентифицируются UUID, которые я сохраняю. Но я не могу сохранять экземпляры CBService и CBCharacteristic в CoreData, потому что они не являются производными от NSManagedObject — по крайней мере, я не знаю, как я мог бы это сделать. Или я неправильно понял ваш вопрос?   -  person mezulu    schedule 28.10.2012
comment
Хорошо, я знаю, что понял ваш вопрос. Я думаю, вам придется иметь дело с discoveryCharacteristics: forService: с использованием UUID...   -  person Acacio Martins    schedule 29.10.2012
comment
Да, это то, чем я сейчас занимаюсь, но я пытался избежать этой части.   -  person mezulu    schedule 30.10.2012


Ответы (1)


Mezulu, вы хотите использовать зашифрованную/парную ссылку — тогда iOS выполнит кеширование за вас. См. мой ответ здесь.

person William henderson    schedule 01.05.2013
comment
спасибо за этот ответ. Я не знал, что в iOS 6 появилось кэширование сервисов и характеристик. Это то, что я искал. - person mezulu; 04.05.2013