Ich habe ein Problem mit der Aktualisierung meines CoreBluetooth-Codes von iOS 6 auf iOS 7. Ich kann nach Peripheriegeräten suchen und Verbindungen herstellen. Allerdings kann ich ein Peripheriegerät nicht mit den neuen CoreBluetooth-Methoden von iOS 7 erneut verbinden ein Blick darauf, wie ich versuche, die Wiederverbindung zu erreichen:
%Vor%Dabei ist uuidString die gespeicherte periphere UUID.
Ich komme immer zur NSLog-Anweisung, wo keine Peripheriegeräte verfügbar sind. Ich denke, ich vermisse etwas sehr Offensichtliches und jemand kann mich in die richtige Richtung weisen.
Außerdem habe ich andere Posts über die iOS 7-Update-Probleme mit CoreBluetooth gelesen und habe versucht, das BLE-Gerät und das iOS-Gerät zurückzusetzen, aber ohne Erfolg.
Vielen Dank im Voraus! hörbar
Es stellte sich heraus, dass mein Fehler darin bestand, wie ich die Kennung des Peripheriegeräts in ein NSString
-Format umwandelte, bevor ich eine Nachricht an meine retrievePeripheral-Methode sendete.
Das war der falsche Weg:
%Vor%Das war der richtige Weg (der in meinem Szenario funktionierte):
%Vor% Gemäß der Apple-Dokumentation ist die NSUUID
-Klasse nicht gebührenfrei mit CoreFoundation CFUUIDRef
überbrückt, wie unten beschrieben:
Hinweis: Die
NSUUID
-Klasse ist nicht gebührenfrei mit CoreFoundationCFUUIDRef
überbrückt. Verwenden Sie UUID-Zeichenfolgen, um bei Bedarf zwischenCFUUID
undNSUUID
zu konvertieren. ZweiNSUUID
-Objekte sind nicht garantiert vergleichbar durch Zeigerwert (wieCFUUIDRef
ist); Verwenden SieisEqual:
, um zweiNSUUID
Instanzen zu vergleichen.
Für diejenigen von euch, die eine visuelle Darstellung dessen mögen, was ich hier mache, ist ein Beispiel:)
Die in der Konsole gedruckten Peripheralinformationen:
%Vor% Die falsche Art, die Kennung des Peripheriegeräts in ein NSString
umzuwandeln, ergibt:
Die korrekte Art, die Kennung des Peripheriegeräts in ein NSString
umzuwandeln, ergibt:
Ich hoffe, das hilft jemandem auf seiner BLE-Reise und fühlt sich frei, mich zu korrigieren, wenn ich mich in irgendeiner Weise geirrt habe, da ich immer noch dieses Zeug lerne.
Danke!
hörbar
Dies ist ein alter Beitrag, aber für andere, die nach Antworten suchen.
Der zweite / nächste Aufruf von retrieveConnectedPeripherals benötigt tatsächlich die Dienst-UUID (CBUUID-Typ), nicht die erstmalig verbundene iOS-NSUUID. Was abgerufen wird, ist eine Liste und Peripheriegeräte, bei denen diese Dienst-UUID implementiert ist. Zum Beispiel, wenn Sie eine Anzahl von Aktivitätsarmbändern haben und alle Ihren benötigten Herzschlagdienst unter anderem haben, werden Sie alle 3 Peripheriegeräte abrufen. Auch beim ersten Aufruf von BEKANNTEN Peripheriegeräten müssen Sie die NSUUID zwischen den App-Starts speichern, da diese ID beim ersten Verbinden von iOS erstellt wird. Hoffe das hilft
Tags und Links objective-c iphone ipad ios7 core-bluetooth