Alteración de valores dentro de bloques en Objective – C

Tengo un bloque de código que agrega un object a una matriz declarada fuera del bloque con la notación "__bloque" (es un ivar). Sin embargo, una vez que se abandona el bloque, la matriz no contiene valores. Sé que no está tratando de agregar cadenas vacías a la matriz, porque mi console imprime las cadenas correctamente. Cualquier ayuda sería apreciada. Aquí está mi código:

addressOutputArray = [[NSMutableArray alloc] init];

  para (CLLocation * location en locationOutputArray)
 {
     CLGeocoder * geocoder = [[CLGeocoder alloc] init];
     [geocoder reverseGeocodeLocation: location completionHandler: ^ (NSArray * marcas de position, error NSError *)
      {
          if (marcas de position && placemarks.count> 0)
          {
              CLPlacemark * topResult = [placemarks objectAtIndex: 0];

              NSString * address = [NSString stringWithFormat: @ "% @% @,% @% @", [topResult subThoroughfare], [topResult roadfram], [topResult locality], [topResult administrativeArea]];

              [addressOutputArray addObject: address];

              NSLog (@ "% @", dirección);
          }

      }];

     [liberación de geocoder];
 }

 NSLog (@ "Conteo de matriz de salida de dirección:% d", [countOutputArray count]);

El logging final me da una count de cero. Cualquier ayuda en absoluto sería muy apreciada.

El problema es que reverseGeocodeLocation ejecuta de forma asíncrona y no espera que las llamadas se completen antes de registrar el tamaño de su matriz de salida. Puede tener mejor suerte con algo como:

 for(CLLocation *location in locationOutputArray) { CLGeocoder *geocoder = [[CLGeocoder alloc] init]; [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { if(placemarks && placemarks.count > 0) { CLPlacemark *topResult = [placemarks objectAtIndex:0]; NSString *address = [NSString stringWithFormat:@"%@ %@,%@ %@", [topResult subThoroughfare],[topResult thoroughfare],[topResult locality], [topResult administrativeArea]]; [addressOutputArray addObject:address]; NSLog(@"%@",address); NSLog(@"Address output array count is now: %d", [addressOutputArray count]); } }]; [geocoder release]; } 

En cualquier caso, está haciendo todo correctamente con su bloque en términos de cómo lo está configurando y usándolo para modificar el estado de su addressOutputArray addressOutputArray. El único problema es que no estabas esperando hasta que todos tus bloques hayan terminado de ejecutarse antes de verificar el resultado.