0

Apples CoreBluetooth TemperatureSensor の例 ( https://developer.apple.com/library/ios/samplecode/TemperatureSensor/Introduction/Intro.html )に基づいてアプリに CoreBluetooth を実装しました。デバイスの検索、結果のテーブルビューへの入力、デバイスの選択と接続がうまく機能します。私の問題は、アプリ全体のビュー間の接続を維持したいということです。

私の現在のセットアップでは、Bluetooth セットアップ ビューに移動するボタンのあるビューがあります。Bluetooth ビューはモーダルに表示され、ここで BT デバイスを検索し、そのうちの 1 つに接続します。ビューを閉じるとすぐに、おそらく接続が保持されていないために接続が失われますか?

したがって、私はシングルトン実装を使用してオブジェクトを保持し (Apple の例のように)、接続を維持することを望んでいますが、うまくいきません。ただし、シングルトンからオブジェクトを取得し、connectPeripheral を呼び出して再接続することはできますが、ユーザーの観点からは、ユーザーが以前に接続した後にパスワードを再度入力する必要があることはそれほど素晴らしいことではありません。

では、BT デバイスが接続されている設定ビューがある場合など、ビュー間で Bluetooth 接続を維持し、残りのアプリで同じ接続を使用するにはどうすればよいですか?

更新: 含まれるコード

また、言及する価値があるのは、私のクラス (共有インスタンスを含む) が Apple の例に基づいているだけでなく、HMSoft の SerialGATT 実装 (Apple の実装に基づいていると思われます) にも基づいていることです。これは、gitで見つけた1つの場所へのリンクですhttps://github.com/ezefranca/kit-iot-wearable-ios/blob/master/kit-iot-wearable-ios/SerialGATT.h

したがって、私のシングルトンでは、SerialGATT.h に以下を追加しました (id も試しましたが、違いはありませんでした)。

+ (SerialGATT *)sharedManager;

そしてSerialGATT.mには私が持っています

+ (SerialGATT*)sharedManager {
    static SerialGATT *_sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedInstance = [[self alloc] init];
    });

    return _sharedInstance;
}

Bluetooth ビューコントローラーで SerialGATT とシングルトンを使用する場合、SerialGATT のデリゲート メソッドを実装し、viewDidLoad に次のように記述します。

[[SerialGATT sharedManager] setup];
[[SerialGATT sharedManager] setDiscoveryDelegate:self];

注意!単に "delegate" という名前になる前に、元の SerialGATT の例から discoveryDelegate の名前を変更しました。discoveryDelegate は Apples の例で使用されている名前であり、重要ではありません。

ここから、モーダル Bluetooth 設定ビューですべてが正常に機能します。上記のように、デバイスを検索して接続できます。代議員が呼ばれています。すべてが順調でダンディです。ただし、モーダルを閉じると、デバイスは切断されますが、シングルトンにアクセスしたり、再接続したりすると、他のビューでオブジェクトを見つけることができます。しかし、もう一度、再接続してパスワードを再入力するのではなく、接続を維持したいと思います。

4

0 に答える 0