Как сохранить CBPeripheral для использования в других представлениях

Я устанавливаю несколько соединений BLE в своем контроллере представления, SViewController, и мне нужно сохранить периферийные устройства для использования в других контроллерах представления. Я пытался создать объект NSUserDefault и хранить там периферийные устройства, но получил ошибку "Attempt to insert non-property value", и он так и не был вставлен. Затем я попытался обернуть его в объект NSData и сохранить в NSUserDefaults, но получил ошибку "-[CBConcretePeripheral encodeWithCoder:]: unrecognized selector sent", и приложение разбилось. Так что это определенно не сработало. Я также пытался сделать три переменные CBPeripheral глобальными, но столкнулся с кучей проблем. (Я все еще очень новичок в программировании). Затем я посмотрел, как их кэшировать, но прочитал здесь, что это не сработает, и чтобы не тратить время впустую.

Кто-нибудь знает, как сохранить объект CBPeripheral, чтобы я мог получить к нему доступ и инициализировать его в других контроллерах представления?


person Henry F    schedule 03.07.2013    source источник
comment
Вы пробовали синглтонный подход? Можете ли вы поддерживать соединение Bluetooth между представлениями или вам нужно повторно подключаться, когда вы хотите его использовать?   -  person Simon Bøgh    schedule 12.01.2016


Ответы (1)


Создайте синглтон, который реализует все ваши CBCentralManagerDelegate методы. Затем просто создайте свои собственные методы делегата для этого синглтона, чтобы сообщать вашим viewControllers. Таким образом, вы можете легко использовать его в любом классе. Что касается хранения CBPeripherals, вы можете просто поместить их внутри NSMutableArray, содержащегося внутри вашего синглтона.

Перейдите по этой ссылке, чтобы узнать, как Создать экземпляр синглтона

(О, и для того, где вы говорите "Инициализировать его в других контроллерах представления".. Это никогда не должно иметь место. Но, может быть, вы просто хотите сохранить CFUUIDRef? Если вы сделаете это, вы можете просто вызовите retrievePeripherals:(NSArray*) и верните периферийный объект туда, куда хотите. Если вы это имеете в виду...)

person Tommy Devoy    schedule 03.07.2013