Estou recebendo um erro
A variável não é atribuível (falta de especificador de tipo de bloco __)
na linha aPerson = participant;
. Como posso garantir que o bloco possa acessar a aPerson
variável e a aPerson
variável possa ser retornada?
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
é prefixado com dois sublinhados.__block
meu erro, mas o valor não está mantendo fora de bloco. Qualquer ajuda aquiApenas um lembrete de um erro que eu cometi também, o
A declaração deve ser feita ao declarar a variável pela primeira vez, ou seja, FORA do bloco, e não dentro dela. Isso deve resolver os problemas mencionados nos comentários sobre a variável que não mantém seu valor fora do bloco.
fonte
Basta usar o
__block
prefixo para declarar e atribuir qualquer tipo de variável dentro de um bloco.Por exemplo:
fonte
Para atribuir uma variável dentro do bloco que fora do bloco sempre use o especificador __block antes dessa variável, seu código deve ser assim: -
fonte
fonte
Tente
__weak
se você receber algum aviso sobre o ciclo de retenção, use__block
Agora você pode consultar o
weakPerson
objeto dentro do bloco.fonte
O bloco yes é a funcionalidade mais usada, portanto, para evitar o ciclo de retenção, devemos evitar o uso da variável forte, incluindo o self dentro do bloco, apesar de usar o _weak ou weakself.
fonte
Quando vi o mesmo erro, tentei resolvê-lo da seguinte maneira:
e está funcionando bem
Basta adicionar " __block " antes de Variable.
fonte