Ответ 1
Я разместил CBCentralManager
в одноэлементном режиме, и сообщение об ошибке было решено.
(CBCentralManager
не будет освобожден)
После того, как я завершил отсоединение от своих устройств Bluetooth, увидев, что они отключились в делегате didDisconnectPeripheral, я пытаюсь отклонить мой контроллер view.
Когда это произойдет, я вижу сообщение: "[CoreBlueooth] Неправильное подключение XPC"
Есть ли что-то конкретное, которое нужно очистить с помощью Bluetooth до того, как диспетчер просмотра будет уволен?
Я разместил CBCentralManager
в одноэлементном режиме, и сообщение об ошибке было решено.
(CBCentralManager
не будет освобожден)
Я получил следующее сообщение:
[CoreBlueooth] Неверное подключение XPC
И я не смог сканировать устройства BLE, используя довольно простую реализацию:
NSObject<CBCentralManagerDelegate, CBPeripheralDelegate>
Решение для меня состояло в том, чтобы добавить значение в мое Info.plist
для Конфиденциальность - описание периферийного использования Bluetooth NSBluetoothPeripheralUsageDescription
, описывающее, что я делаю с периферийным устройством Bluetooth.
Похоже на Info.plist
:
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Play with BLE Compatible devices<string>
Напишите здесь что-то более точное;)
Ссылка CBCentralManager должна быть строгой ссылкой на класс как переменную-член. Он не может работать как локальная ссылка.
попробуйте следующее:
CBPeripheral *mConnectedPeripheral;
-(void)viewDidDisappear:(BOOL)animated{
[_centralManager cancelPeripheralConnection:mConnectedPeripheral];
}
Хорошо, я столкнулся с этой проблемой, и после попытки добавить необходимый ключ в Info.plist он все еще работал, и у меня не было представления о том, чтобы использовать его в данный момент (это было в AppDelegate). Так что, если это все еще не работает для вас, попробуйте следующее.
Я использовал для: (в Swift)
_ = BluetoothMngr.init(config: bleConfig)
Проблема здесь заключалась в том, что переменная, управляющая Bluetooth, не была сохранена, поэтому, когда мы добавляем обратный вызов BLE, они заканчиваются пустым классом, поэтому просто создайте глобальную переменную, в которой она будет сохранена (вот почему она работает с синглтоном, и просмотрите их сохраняются) вот так.
self.bleMngr = BluetoothMngr.init(config: bleConfig)
Работал на меня, надеюсь, это поможет.
В моем случае я отключил тестовую среду приложения от возможностей, и это сработало
Та же проблема произошла, когда я переместил все свои методы BLE в выделенный класс (BLEController) и сохранил ViewController в чистоте. Сначала я попытался инициализировать его внутри класса ViewController следующим образом:
let _ = BLEController()
Это приводит к проблеме "Недопустимое соединение XPC". Что действительно помогло, так это переместить объект в класс AppDelegate. Если честно, я понятия не имею, почему это помогло и в чем разница.