Asignar una variable dentro de un Bloque a una variable fuera de un Bloque

Me sale un error

La variable no es asignable (falta el especificador de tipo __block)

en la línea aPerson = participant; . ¿Cómo puedo asegurarme de que el bloque pueda acceder a la variable aPerson y se pueda devolver la variable aPerson ?

 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; 

    Necesita usar esta línea de código para resolver su problema:

     __block Person *aPerson = nil; 

    Para obtener más información, consulte este tutorial: Bloques y variables

    Solo un recordatorio de un error que también cometí, la

      __block 

    la statement debe hacerse cuando se declara por primera vez la variable, es decir, FUERA del bloque, no dentro de él. Esto debería resolver los problemas mencionados en los comentarios sobre la variable que no conserva su valor fuera del bloque.

    Simplemente use el prefijo __block para declarar y asignar cualquier tipo de variable dentro de un bloque.

    Por ejemplo:

     __block Person *aPerson = nil; __block NSString *name = nil; 

    Para asignar una variable dentro de bloque que fuera de bloque siempre use __block especificador antes de esa variable su código debería ser así: –

     __block Person *aPerson = nil; 
     __block Person *aPerson = nil; 

    yes block es la funcionalidad más utilizada, por lo que para evitar el ciclo de retención, debemos evitar el uso de la variable fuerte, incluido self dentro del bloque, a pesar de usar el _weak o el weasaw.

    Prueba __weak si recibes alguna advertencia con respecto al ciclo de retención o usa __block

     Person *strongPerson = [Person new]; __weak Person *weakPerson = person; 

    Ahora puede referir el objeto weakPerson dentro del bloque.