iOS CoreBluetooth CBPeripheral сделалReceiveReadRequest

У меня есть два проекта. Один действует как центральный, другой как периферийный. Центральный сервер подключился к периферийному, затем центральный вызывает метод readValueForCharacteristic. Не сразу, а примерно через 5-10 секунд периферия вызывает метод делегата - (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request. Почему есть задержка? Как устранить задержку? Какие-нибудь мысли? Уже почти неделю пытаюсь. Ценю каждую помощь, спасибо

центральный

- (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;
        }
    }];
}

периферический

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

person alpine    schedule 11.11.2015    source источник
comment
Ваши центральные и периферийные приложения работают на одном устройстве или на разных?   -  person Imran    schedule 11.11.2015
comment
Почему вы используете enumerateKeysAndObjectsUsingBlock, когда можно просто сказать CBCharacteristic *char=(CBCharacteristic *)self.charachterMDict[peripheral];? Предположительно, вы звоните respondToRequest:, но не показали этого?   -  person Paulw11    schedule 11.11.2015
comment
Я не звонил respondToRequest:   -  person alpine    schedule 11.11.2015


Ответы (1)


Вызов respondToRequest: в методе - (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request

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

@Paulw11, спасибо

person alpine    schedule 11.11.2015