iOS CoreBluetooth CBPeripheral didReceiveReadRequest

Saya punya dua proyek. Yang satu bertindak sebagai pusat, yang lain sebagai periferal. Pusat telah terhubung ke periferal, kemudian pusat memanggil metode readValueForCharacteristic. Tidak segera, tapi setelah sekitar 5-10 detik, periferal memanggil metode delegasi - (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request. Mengapa ada penundaan? Bagaimana cara menghilangkan penundaan? Ada pemikiran? Saya sudah mencoba selama hampir seminggu sekarang. Hargai setiap bantuan, terima kasih

pusat

- (void)sendBtnClick:(id)sender
{
    USCPeerBtn *btn = (USCPeerBtn *)sender;
    CBPeripheral *peripheral = btn.connectedPeripheral;
    if (!peripheral) {
        return;
    }

    [self.charachterMDict enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {

        if (key == peripheral) {
            [(CBPeripheral *)key readValueForCharacteristic:(CBCharacteristic *)obj]; // read
            *stop = YES;
        }
    }];
}

periperal

// CBPeripheralManagerDelegate
- (void)peripheralManager:(CBPeripheralManager *)peripheral  didReceiveReadRequest:(CBATTRequest *)request
{
    NSLog(@"didReceiveReadRequest");
}

person alpine    schedule 11.11.2015    source sumber
comment
Aplikasi pusat dan periferal Anda berjalan di perangkat yang sama atau berbeda?   -  person Imran    schedule 11.11.2015
comment
Mengapa Anda menggunakan enumerateKeysAndObjectsUsingBlock padahal Anda hanya bisa mengatakan CBCharacteristic *char=(CBCharacteristic *)self.charachterMDict[peripheral]; ? Mungkin Anda menelepon respondToRequest: tetapi belum menunjukkan ini?   -  person Paulw11    schedule 11.11.2015
comment
Saya belum menelepon respondToRequest:   -  person alpine    schedule 11.11.2015


Jawaban (1)


Hubungi respondToRequest: dalam metode - (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request

// CBPeripheralManagerDelegate
- (void)peripheralManager:(CBPeripheralManager *)peripheral     didReceiveReadRequest:(CBATTRequest *)request
{
    [peripheral respondToRequest:request withResult:CBATTErrorSuccess];
    NSLog(@"didReceiveReadRequest");
}  

@ Paulw11, terima kasih

person alpine    schedule 11.11.2015