10

Ich habe ein paar BLE-Verbindungen in meinem View-Controller, SViewController, und ich muss die Peripheriegeräte für den Einsatz in anderen View-Controller speichern. Ich habe versucht, ein NSUserDefault-Objekt zu erstellen und die Peripheriegeräte dort zu speichern, aber ich habe den Fehler "Attempt to insert non-property value", und es wurde nie eingefügt. Ich habe dann versucht, es in ein NSData-Objekt zu wickeln und es in NSUserDefaults zu speichern, bekam aber den Fehler "-[CBConcretePeripheral encodeWithCoder:]: unrecognized selector sent" und die App stürzte ab. Das hat also definitiv nicht funktioniert. Ich habe auch versucht, die drei CBPeripheral-Variablen global zu machen, aber ich habe damit eine Menge Probleme bekommen. (Ich bin noch sehr neu im Programmieren). Ich habe dann nachgeschaut, ob ich sie irgendwie zwischenspeichern könnte, aber ich habe hier gelesen, dass es nicht funktioniert und die Zeit nicht verschwendet wird.So speichern Sie ein CBPeripheral für die Verwendung in anderen Ansichten

Kann jemand ein CBPeripheral-Objekt speichern, damit ich darauf zugreifen und es in anderen View-Controllern initialisieren kann?

+0

Haben Sie den Singleton Ansatz versucht? Können Sie die Bluetooth-Verbindung zwischen den Ansichten aufrechterhalten oder müssen Sie die Verbindung wiederherstellen, wenn Sie sie verwenden möchten? –

Antwort

12

Erstellen Sie ein Singleton, das alle Ihre CBCentralManagerDelegate Methoden implementiert. Erstellen Sie dann Ihre eigenen Delegate-Methoden für diesen Singleton, um Ihre ViewControllers zu benachrichtigen. Auf diese Weise können Sie es problemlos in jeder Klasse verwenden. Um die CBPeripheriegeräte zu speichern, können Sie sie einfach in ein NSMutableArray, das in Ihrem Singleton enthalten ist, platzieren.

Schauen Sie sich diesen Link, wie man Create a Singleton Instance

(Oh und wo Sie sagen „es in anderen Ansicht-Controller initialisieren“ ..das nicht immer der Fall sein sollte. Aber vielleicht meinen Sie nur zu speichern, Die CFUUIDRef? Wenn Sie das tun, können Sie einfach anrufen retrievePeripherals:(NSArray*) und holen Sie das Peripheriegerät zurück, wo immer Sie wollen.Wenn das ist, was Sie meinen ...)

+0

Extrem hilfreich, vielen Dank! – John

+0

Kein problemooooo –