Ich erhalte eine Fehlermeldung
Variable ist nicht zuweisbar (fehlender __block-Typbezeichner)
auf der Linie aPerson = participant;
. Wie kann ich sicherstellen, dass der Block auf die aPerson
Variable zugreifen und die aPerson
Variable zurückgegeben werden kann?
Person *aPerson = nil;
[participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Person *participant = (Person*)obj;
if ([participant.gender isEqualToString:@"M"]) {
aPerson = participant;
*stop = YES;
}
}];
return aPerson;
__block
vorangestellt sind .__block
meinem Fehler weg, aber der Wert bleibt nicht außerhalb des Blocks. Jede Hilfe hierNur eine Erinnerung an einen Fehler, den ich selbst gemacht habe
Die Deklaration muss erfolgen, wenn die Variable zuerst deklariert wird, dh AUSSERHALB des Blocks, nicht innerhalb des Blocks. Dies sollte die in den Kommentaren erwähnten Probleme beheben, bei denen die Variable ihren Wert außerhalb des Blocks nicht beibehält.
quelle
Verwenden Sie einfach das
__block
Präfix, um einen beliebigen Variablentyp innerhalb eines Blocks zu deklarieren und zuzuweisen.Zum Beispiel:
quelle
Um eine Variable innerhalb eines Blocks zuzuweisen, die außerhalb des Blocks immer den __block-Bezeichner vor dieser Variablen verwendet, sollte Ihr Code folgendermaßen aussehen: -
quelle
quelle
Versuchen
__weak
Sie es, wenn Sie eine Warnung bezüglich des Aufbewahrungszyklus erhalten__block
Jetzt können Sie das
weakPerson
Objekt innerhalb des Blocks referenzieren .quelle
Ja-Block sind die am häufigsten verwendeten Funktionen. Um den Aufbewahrungszyklus zu vermeiden, sollten wir die Verwendung der starken Variablen, einschließlich des Selbst innerhalb des Blocks, vermeiden, obwohl Sie _weak oder schwach selbst verwenden.
quelle
Als ich den gleichen Fehler sah, versuchte ich ihn wie folgt zu beheben:
und es funktioniert gut
Fügen Sie einfach " __block " vor Variable hinzu.
quelle