0

私は iOS コーディングは初めてではありませんが、iOS の BLE は初めてです。

BLE デバイスにアクセスして書き込むためのコードを Main View Controller に正常に記述しました。そのため、すべての周辺機器とマネージャーがテストされます。

私のアプリは、BLE デバイスのリストを取得し、それらに接続してシリアル番号を取得し、それらから切断してから、それらを tableView に配置します。ユーザーがいずれかを選択したら、別のビューに移動して再接続する必要があります。周辺機器に接続するためのユーティリティとして別のクラスを作成したいと思います。これは、ユーティリティに正常に渡され、ユーティリティで読み書きされます。peripheral.state が接続されています。

周辺機器に書き込もうとするたびに、コードがクラッシュします。ただし、ペリフェラルは、データが書き込まれたことを報告します。

何が問題だったのかを理解するために、周辺機器を読み始めましたが、同じ結果でした。Crash です。

ユーティリティで新しいマネージャーを開始していますが、centralManagerDidUpdateState がそこで呼び出されません。また、周辺機器を知っていればうまくいくとマネージャーが考えずに試してみました。

では、centralManager を新しいクラスで動作させるにはどうすればよいでしょうか? メインクラスでマネージャーをどうにかして停止する必要がありますか?

- (void)getPeripheralStatus:(CBPeripheral *)peripheral{

device_Info_UUID = [CBUUID UUIDWithString:kDevice_Info_SID];
security_UUID = [CBUUID UUIDWithString:kSecurity_SID];
status_UUID = [CBUUID UUIDWithString:kStatus_SID];
device_ID_char_UUID =[CBUUID UUIDWithString:kSecurity_char_DeviceID];

SHA256in = [[NSMutableString alloc]initWithString:lockMasterKey];

mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

peripheral.delegate = self;
[self.mgr connectPeripheral:peripheral options:nil];

これは、メイン コントローラーでは機能するが、ユーティリティでは機能しない行です。

 [self.lock writeValue:myID forCharacteristic:charac type:CBCharacteristicWriteWithResponse];

ありがとう!

4

1 に答える 1