Ich habe ein Problem mit Blöcken in Objective-C. Mein Problem ist, dass der Completion-Block von der Funktion readDataFromCharactUUID niemals mit der Do-while-Schleife aufgerufen wird. Ohne die Do-while-Schleife zu verwenden, wird sie einmal aufgerufen.Blöcke und Do-While-Schleife in Ziel-C
Was ich mit meinem Code tun möchte, ist einen Wert aus einem BLE-Merkmal so oft zu lesen, wie der Wert 0x01 ist.
Meine Frage: Warum wird der Completion Block nie ausgeführt? Was kann ich tun, dass der Completion Block in meinem Fall ausgeführt wird?
Gebrauchte Code:
static bool dataReady = false;
-(IBAction)Buttonstartpressed:(UIButton *)sender{
LGLog(@"start pressed");
NSData *data = [NSData dataWithBytes:(unsigned char[]){CMD_Control_Learn} length:1];
[LGUtils writeData :data
charactUUID :CHARACTERISTIC_UUID_REMOTEBUDDYControl
serviceUUID :SERVICE_UUID_REMOTEBUDDY
peripheral :_mBuddy completion:^(NSError *error)
{
// Befehl wurde übermittelt
NSLog(@"Einlernen gesendet => Error : %@", error);
do
{
// RB_Notification Data Ready auslesen
[LGUtils readDataFromCharactUUID:CHARACTERISTIC_UUID_REMOTEBUDDYNotification
serviceUUID:SERVICE_UUID_REMOTEBUDDY
peripheral:_mBuddy
completion:^(NSData *data, NSError *error)
{
NSLog(@"Data : %@ Error : %@", data, error);
const uint8_t *bytes = [data bytes]; // pointer to the bytes in data
int data_int = bytes[0]; // first byte
switch(data_int)
{
case 0x01:
NSLog(@"Data ready!");
dataReady = true;
break;
case 0x02:
NSLog(@"Data Transimission Error!");
break;
case 0x00:
NSLog(@"No Notification! => check again");
break;
default:
break;
}
}
];
}
while(!dataReady);
}];}
Vielen Dank im Voraus!
Glück gehabt mit diesem? – Miknash