フレームワークを使用しています。CoreBluetooth
特性の値を更新した後didUpdateValueForCharacteristic
、周辺機器からコールバックを取得します。NSData
ここで、返されたオブジェクト内のデータをデコードするスニペットを見つけました。
- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{
NSUInteger *flags = (NSUInteger*) [[[characteristic value] subdataWithRange:NSMakeRange(0, 1)] bytes];
NSUInteger length;
if(*flags & 0x01)
{
length = 2;
}
else
{
length = 1;
}
NSUInteger *measurement = (NSUInteger*) [[[characteristic value] subdataWithRange:NSMakeRange(1, length)] bytes];
NSLog(@"Value read from char: %d", *measurement);
}
ここで、コードは例外をスローします。
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSConcreteData subdataWithRange:]: range {1, 1} exceeds data length 1'
誰かが理由を説明できますか?私が読むことになっている値は1バイトでなければなりません。