2016-03-21 2 views
4

Ich entwickle eine App, die nach BLE-Geräten in der Nähe sucht, eine Verbindung zu ihnen herstellt und mit dem verbundenen Gerät kommuniziert. Ich habe versucht, es in 2 View-Controller, Controller-A und Controller-B zu tun. Controller-A sucht nach Geräten in der Nähe und stellt eine Verbindung zu ihnen her. Controller-B würde Daten zum angeschlossenen Gerät austauschen. Controller-A erweitert CBCentralManagerDelegate. Mein Problem ist: Wenn meine App zum Controller-B wechselt, erhält sie nicht die Rückrufe von CBCentralManager. Ich muss CBCentralManager in Controller-B erneut initialisieren. Ich muss auch das Gerät von Controller-A trennen und erneut in Controller-B verbinden. Gibt es einen besseren Weg, es zu tun? Vielen Dank.Fortsetzung der BLE-Aktivitäten auf dem nächsten View-Controller

Antwort

6

Geben Sie Ihren BLE-Code an einer zentralen Stelle ein, z. BLEMaganer (besser) oder AppDelegate (so). So können sich ControllerA und ControllerB dieselbe centrolManager-Instanz teilen.

Zum Beispiel haben Sie derzeit eine Eigenschaft centralManager in ControllerA, und implementieren Sie seine Stellvertreter in ControllerA. Sie greifen auf centralManager von controllerA.centralManager zu.

Verschieben Sie die centralManager Eigenschaft zu AppDelegate, sowie anderen verwandten Code. Dann können Sie centrolManager Instanz von

(UIApplication.sharedApplication().delegate as! AppDelegate).centralManager. 
+0

Zugriff auf diese zentrale Stelle, wie kann ich Daten zurück zu ControllerA und ControllerB. ControllerA und ControllerB sind keine Singleton. Woher weiß ich, dass die Daten an die Instanz gesendet werden, die ich auf meinem Bildschirm ausgeführt habe? Vielen Dank. –

+0

Ich verstehe, wie Sie auf die sharedApplication zugreifen. Das Problem ist: Wie kann man die Daten von der sharedApplication zurück zu controllerA bringen? Zum Beispiel sendet die sharedApplication nach dem Abrufen der Geräte in der Nähe die Gerätenamen zurück an controllerA. Vielen Dank. –

+0

Momentan implementieren Sie den Delegaten in ControllerA, wenn er aufgerufen wird, aktualisieren Sie die Ansichten. Jetzt ist der Delegat in AppDelegate implementiert, Sie benötigen also eine Möglichkeit, ControllerA zu benachrichtigen, dass Daten bereit sind. Ich bevorzuge NSNotification. – dichen

Verwandte Themen