1

さて、私は何千ものチュートリアルと他のスタック オーバーフロー スレッドを調べました (したがって、質問に答えずに重複としてリストしないでください)、この機能の使用方法を理解できません。

私はこのチュートリアルに従いました: http://code.tutsplus.com/tutorials/ios-7-sdk-core-bluetooth-practical-lesson--mobile-20741

セントラルがペリフェラルに接続し、そこから特性を読み取ることができるシステムがあります。

私は今、セントラルに特性内のデータを書き換えさせようとしていますが、呼び出した書き込み行が無視されていることがわかりました。

私は自分の周辺クラス内で自分の特性を次のように宣言しました。

self.transferCharacteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:TRANSFER_CHARACTERISTIC_UUID] properties:CBCharacteristicPropertyNotify|CBCharacteristicPropertyWriteWithoutResponse|CBCharacteristicPropertyRead value:nil permissions:CBAttributePermissionsReadable|CBAttributePermissionsWriteable];

そして、私のcentralManagerで私は呼び出しました

 [peripheral writeValue:[@"rewritten!" dataUsingEncoding:NSUTF8StringEncoding] forCharacteristic:characteristic type:CBCharacteristicWriteWithoutResponse];

しかし、その行は無視されます。誰かが間違っているかもしれないことについて私に話すことができますか? 周辺機器クラスにメソッドを追加する必要がありますか?

また、WithResponse を実行してみましたが、周辺機器からそのメソッドを呼び出すことさえありません。

4

1 に答える 1

5

あなたはまだ問題に行き詰まっていますか?

メソッドを実装していないため、問題が解決していないと思いますdidReceiveWriteRequests

// Processes write command received from a central.

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests
{

    CBATTRequest       *request = [requests  objectAtIndex:0];
    NSData             *request_data = request.value;
    CBCharacteristic   *write_char = request.characteristic;
    //CBCentral*            write_central = request.central;
    //NSUInteger            multi_message_offset = request.offset;

    // Face commands this PWR RX to advertise serno UUID?
    int total_write_requests = 0;
    if ([ write_char.UUID isEqual:[CBUUID UUIDWithString:YOUR_CHARACTERISTIC_UUID]] )
    {


        // Read desired new_state data from central:
        unsigned char *new_state = (unsigned char *)[request_data   bytes];
        my_new_state = new_state[0];
        #endif
        NSLog(@"- advertise serno UUID: %s", my_new_state ? "TRUE" : "FALSE" );

        // Select UUID that includes serno of PWR RX, for advertisements:

        ++total_write_requests;
    }

    if ( total_write_requests )
    {
        [peripheral respondToRequest:request    withResult:CBATTErrorSuccess];  // result = success
    }
    else
    {
        NSLog(@"_no_write_request_FAULT !!");
    }
}

CBCharacteristicWriteWithoutResponse [peripheral respondToRequest:request withResult:CBATTErrorSuccess];を使用している場合と同様に、 をコメントアウトします。

コードの取得元: iOS Bluetooth LEの例は、peripheralManager didReceiveWriteRequests

于 2014-12-03T13:36:16.780 に答える