2012-10-24 5 views
9

keine Dienste und Merkmale bei einer erneuten Verbindung zu erkennen Ich arbeite an einer CoreBluetooth Manager-App für ein iPhone. Um die Verbindung zu einem zuvor entdeckten CBPeripheral wiederherzustellen, speichere ich die UUID des Peripheriegeräts (in CoreData) und rufe CBCentralManager retrievePeripherals: auf. Meine didRetrievePeripherals: Callback wird angerufen und ich kann mich verbinden usw. So weit so gut.In CoreBluetooth

Da ich wieder eine Verbindung zu einem Peripheriegerät herstelle, von dem ich bereits weiß, möchte ich vermeiden, seine Dienste und Eigenschaften zu entdecken. Daher speichere ich die UUIDs der Dienste und Merkmale (wiederum in CoreData zusammen mit der UUID des Peripheriegeräts), wenn ich das erste Mal eine Verbindung herstelle.

Aber ich kann nicht diese UUIDs verwenden, um die Eigenschaften, weil die readValueForCharacteristic des CBPeripheral zu lesen oder schreiben: oder writeValueForCharacteristic: Nehmen Sie ein CBCharacteristic als Parameter, und es gibt keine API eine CBCharacteristic Instanz zu konstruieren.

Gibt es eine Möglichkeit, die Erkennung von Diensten und Eigenschaften während der Verbindung mit einem bereits bekannten Peripheriegerät zu vermeiden?

+0

Hallo, konnten Sie beim Speichern der UUID bekannter Geräte in CoreData nicht einfach eine Datenstruktur für jedes Gerät speichern, das die Dienste und Merkmale enthält, die sie implementieren? –

+1

Die Dienste und Merkmale eines Geräts werden durch UUIDs identifiziert, die ich speichere. Aber ich kann keine Instanzen von CBService und CBCharacteristic in CoreData speichern, weil sie nicht von NSManagedObject abgeleitet sind - zumindest weiß ich nicht, wie ich es machen könnte. Oder habe ich deine Frage missverstanden? – mezulu

+0

Ok ich weiß deine Frage verstehen. Ich denke, du wirst mit discoverCharacteristics zu tun haben: forService: mit den UUIDs ... –

Antwort

3

Mezulu, Sie möchten einen verschlüsselten/gepaarten Link verwenden - dann übernimmt iOS das Caching für Sie. Siehe meine Antwort here.

+0

danke für diese Antwort. Mir war nicht bewusst, dass iOS 6 das Caching von Diensten und Merkmalen eingeführt hat. Das ist, was ich gesucht habe. – mezulu

Verwandte Themen