web-dev-qa-db-fra.com

Connexion CoreBluetooth XPC non valide lors du rejet du contrôleur

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é?

15
Lou_257

J'ai placé CBCentralManager dans un singleton et le message d'erreur est résolu.

(CBCentralManager ne sera pas désalloué)

7
oOEric

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;)

6
GabLeRoux

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. 

3
Debasish Chowdhury

essaye ça:

CBPeripheral *mConnectedPeripheral;

-(void)viewDidDisappear:(BOOL)animated{
    [_centralManager cancelPeripheralConnection:mConnectedPeripheral];
}
1
Garima Paliwal

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.

0
Rémy Blanc