1

フレームワークを使用しています。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バイトでなければなりません。

4

1 に答える 1