Je reçois une erreur
La variable n'est pas attribuable (spécificateur de type __block manquant)
sur la ligne aPerson = participant;
. Comment puis-je m'assurer que le bloc peut accéder à la aPerson
variable et que la aPerson
variable peut être retournée?
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
est préfixé par deux traits de soulignement.__block
mon erreur disparu, mais la valeur ne retient pas hors du bloc. Toute aide iciJuste un rappel d'une erreur que je me suis faite moi aussi, le
doit être effectuée lors de la première déclaration de la variable, c'est-à-dire À L'EXTÉRIEUR du bloc, pas à l'intérieur de celui-ci. Cela devrait résoudre les problèmes mentionnés dans les commentaires sur la variable ne conservant pas sa valeur en dehors du bloc.
la source
Utilisez simplement le
__block
préfixe pour déclarer et affecter tout type de variable à l'intérieur d'un bloc.Par exemple:
la source
Pour assigner une variable à l'intérieur d'un bloc qui à l'extérieur du bloc utilise toujours le spécificateur __block avant cette variable, votre code devrait être comme ceci: -
la source
la source
Essayez
__weak
si vous recevez un avertissement concernant le cycle de conservation sinon utilisez__block
Vous pouvez maintenant référencer un
weakPerson
objet dans un bloc.la source
oui le bloc est la fonctionnalité la plus utilisée, donc pour éviter le cycle de rétention, nous devons éviter d'utiliser la variable forte, y compris self à l'intérieur du bloc, malgré l'utilisation de _weak ou de faible.
la source
Quand j'ai vu la même erreur, j'ai essayé de la résoudre comme:
et son bon fonctionnement
Ajoutez simplement " __block " avant la variable.
la source