Une fois la déconnexion de mes périphériques Bluetooth terminée, et voyant qu'ils se sont déconnectés dans le délégué didDisconnectPeripheral, j'essaie de fermer mon contrôleur de vue.
Lorsque cela se produit, le message suivant s'affiche: "[CoreBlueooth] Connexion XPC non valide"
Y a-t-il quelque chose en particulier qui doit être nettoyé avec Bluetooth avant que le viewcontroller ne soit renvoyé?
J'ai placé CBCentralManager
dans un singleton et le message d'erreur est résolu.
(CBCentralManager
ne sera pas désalloué)
Je recevais le message suivant:
[CoreBlueooth] Connexion XPC non valide
Et je n'ai pas pu analyser les périphériques BLE en utilisant une implémentation assez simple du suivant:
NSObject<CBCentralManagerDelegate, CBPeripheralDelegate>
La solution pour moi consistait à ajouter une valeur dans mon Info.plist
pour Confidentialité - Description de l'utilisation du périphérique Bluetooth NSBluetoothPeripheralUsageDescription
décrivant ce que je fais avec le périphérique Bluetooth.
Cela ressemble à ceci dans info.plist
:
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Play with BLE Compatible devices<string>
Ecrire quelque chose de plus précis ici;)
La référence CBCentralManager doit être une référence forte à la classe en tant que variable membre. Cela ne peut pas fonctionner comme une référence locale.
essaye ça:
CBPeripheral *mConnectedPeripheral;
-(void)viewDidDisappear:(BOOL)animated{
[_centralManager cancelPeripheralConnection:mConnectedPeripheral];
}
Ok, j’ai rencontré ce problème et après avoir essayé d’ajouter la clé nécessaire à l’Info.plist, cela fonctionnait toujours et j’avais aucune vue à utiliser à ce stade (c’était dans AppDelegate). ne travaillez pas pour vous essayez ce qui suit.
J'avais l'habitude d'utiliser: (en Swift)
_ = BluetoothMngr.init(config: bleConfig)
Le problème ici est que la variable gérant le Bluetooth n’a pas été retenue. Ainsi, lorsque nous ajoutons des rappels BLE, celles-ci se sont retrouvées dans une classe vide. Créez donc simplement une variable globale dans laquelle elle sera conservée (c’est pourquoi il fonctionne avec singleton et les affiche). sont conservés) comme ça.
self.bleMngr = BluetoothMngr.init(config: bleConfig)
Travaillé pour moi, j'espère que ça va aider.