2016-03-21 1 views
4

近くのBLEデバイスをスキャンし、そのうちの1つに接続し、接続されたデバイスと通信するアプリケーションを開発しています。私は2つのビューコントローラ、コントローラAとコントローラBでそれをやろうとしました。コントローラ-Aは、近くのデバイスをスキャンし、その1つに接続します。コントローラBは、接続されたデバイスにデータを交換します。コントローラ-Aは、CBCentralManagerDelegateを拡張します。私の問題は:私のアプリがコントローラBを表示するように切り替えると、CBCentralManagerからコールバックが得られないということです。コントローラBでCBCentralManagerを再度初期化する必要があります。また、デバイスをコントローラ-Aから切り離し、コントローラ-Bに再接続する必要があります。それを行うより良い方法はありますか?ありがとう。BLEのアクティビティを次のビューコントローラに続ける方法

答えて

6

BLE関連のコードを集中管理された場所に配置します。 BLEMaganer(より良い)またはAppDelegate(そう)。したがって、controllerAとcontrollerBは同じcentrolManagerインスタンスを共有できます。

たとえば、現在controllerAにはcentralManagerというプロパティがあり、そのデリゲートはcontrollerAに実装されています。 centralManagerにはcontrollerA.centralManagerでアクセスします。

centralManagerプロパティをAppDelegateと同様に関連するコードに移動します。次に、cent30Managerインスタンスにアクセスすることができます

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

その集中管理された場所で、どのようにデータをコントローラAとコントローラBに返送しますか? ControllerAとcontrollerBはシングルトンではありません。私が画面上で実行しているインスタンスにデータが送り返されていることを知るにはどうすればいいですか?ありがとう。 –

+0

私はsharedApplicationにアクセスする方法を理解しています。問題は、sharedApplicationから再びcontrollerAにデータを戻す方法です。たとえば、近くのデバイスを取得した後、sharedApplicationはデバイス名をcontrollerAにどのように戻しますか。ありがとう。 –

+0

現在、ビューを更新するよう呼び出されるときに、デリゲートをcontrollerAに実装します。デリゲートはAppDelegateに実装されているので、controllerAに通知する方法が必要です。そのデータは準備ができています。私はNSNotificationを好む。 – dichen

関連する問題