私は 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];
ありがとう!