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

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

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

Ответ 1

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

Посмотрите эту ссылку о том, как Создать экземпляр Singleton

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