У меня есть следующий сценарий: IOS приложение (периферийное) X OSX приложение (центральный)CoreBluetooth Государственного Сохранение и восстановление
- я создаю экземпляр моего периферийное менеджер с CBPeripheralManagerOptionRestoreIdentifierKey.
- В didFinishLaunchingWithOptions моей Peripheral, я отправить локальное уведомление после получения периферийного с UIApplicationLaunchOptionsBluetoothPeripheralsKey (ничего с ним не делать)
- В willRestoreState моей Peripheral, я также вызвать уведомление (ничего кроме того, что не делать)
Если мое периферийное приложение все еще работает в фоновом режиме, прежде чем оно будет убито из-за нехватки памяти, я получаю сообщения от центрального процессора OSX.
После того, как приложение iOS будет убито, когда центральное устройство OSX отправит сообщение, оба уведомления, упомянутые выше, приходят на iOS, но сообщение, которое я действительно ожидал, не было.
Я не переустанавливал свой периферийный диспетчер в любой момент, где и как я должен это делать? У меня есть только один периферийный диспетчер для всего цикла моего приложения.
Любые предложения приветствуются.
UPDATE:
если сделать
let options: Dictionary = [CBPeripheralManagerOptionRestoreIdentifierKey: "myId"]
peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: options)
в willRestoreState, мои приложения просто теряют связь
Вам нужно создать/запустить CBPeripheralManager (или CBCentralManager) из AppDelegate? В настоящее время я имею это в отдельном классе singleton, и он не работает для меня. –
У меня также есть это в отдельном классе, но не в статической переменной в AppDelegate, но это переменная экземпляра, хранящаяся в AppDelegate, созданная при запуске приложения, каждый раз, когда мне нужно получить доступ к нему из другого класса, мне нужно получить ссылку на AppDelegate и доступ к моей переменной оттуда.Вероятно, это не лучшая реализация для одноэлементного, но он работает, я переделываю рефакторинг, чтобы в конечном итоге использовать статическую переменную в AppDelegate и получить доступ к ней через sharedInstance. В принципе, у меня есть аналогичная настройка для вашего ... –
Вы можете продолжить сканирование устройства с помощью этого кода, когда приложение будет завершено? Я не могу заставить его работать до сих пор, он никогда не находит устройства, когда приложение прекращается. Работы находят, когда они активны или в фоновом режиме. Однако я не установил пользовательскую очередь (используя нуль) в центральном диспетчере. Интересно, вызывает ли это проблема, поскольку основная очередь (по умолчанию для nil) ушла в этот момент? –