Проблема в том, что reverseGeocodeLocation
выполняется асинхронно, и вы не ожидаете завершения вызовов, прежде чем регистрировать размер выходного массива. Возможно, вам повезет больше с чем-то вроде:
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];
}
В любом случае, вы все делаете правильно со своим блоком с точки зрения того, как вы его настраиваете и используете его для изменения состояния вашего addressOutputArray
ивара. Единственная проблема в том, что вы не дожидались завершения выполнения всех ваших блоков, прежде чем проверяли результат.