Dostaję błąd
Zmiennej nie można przypisać (brak specyfikatora typu __block)
na linii aPerson = participant;
. Jak mogę się upewnić, że blok ma dostęp do aPerson
zmiennej i że aPerson
zmienna może zostać zwrócona?
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
poprzedza go dwa znaki podkreślenia.__block
mojego błędu, ale wartość nie zachowuje się poza blokiem. Każda pomoc tutajPrzypomnienie o pomyłce, którą też popełniłem
deklaracja musi być wykonana przy pierwszym zadeklarowaniu zmiennej, to znaczy POZA blokiem, a nie wewnątrz niego. To powinno rozwiązać problemy wspomniane w komentarzach dotyczących zmiennej, która nie zachowuje swojej wartości poza blokiem.
źródło
Wystarczy użyć
__block
przedrostka, aby zadeklarować i przypisać dowolny typ zmiennej w bloku.Na przykład:
źródło
Aby przypisać zmienną wewnątrz bloku, która poza blokiem zawsze używa specyfikatora __block przed tą zmienną, kod powinien wyglądać następująco: -
źródło
źródło
Spróbuj,
__weak
jeśli pojawi się jakieś ostrzeżenie dotyczące zachowania cyklu w innym przypadku__block
Teraz możesz skierować
weakPerson
obiekt do bloku.źródło
tak blok jest najczęściej używaną funkcjonalnością, więc aby uniknąć cyklu zatrzymania, powinniśmy unikać używania silnej zmiennej, w tym self wewnątrz bloku, inspite użyj _weak lub slave.
źródło
Gdy zobaczyłem ten sam błąd, próbowałem go rozwiązać w następujący sposób:
i działa dobrze
Po prostu dodaj „ __block ” przed Zmienną.
źródło