Цель C только для чтения int?Какие? - PullRequest
19 голосов
/ 18 июля 2011

Я сделал int, чтобы подсчитать, сколько успехов достиг один из моих процессов.За пределами моего кода я объявляю:

int successes = 0.

Затем в моем цикле у меня есть successes++;, и в этот момент XCode жалуется, что «переменная не присваивается (отсутствует спецификатор типа _block)».

Что происходит?Почему я не могу увеличить свой int?Я никогда не объявлял это только для чтения ...

Любая помощь очень ценится.

Код, который я использовал:

_block int successes = 0;

for(CLLocation *location in locationOutputArray)
{
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error)
     {
         if(placemarks && placemarks.count > 0)
         {
             successes++;
             CLPlacemark *topResult = [placemarks objectAtIndex:0];

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

             [addressOutputArray addObject:address];
             NSLog(@"%@",address);
         }

     }];

    [geocoder release];
}

Ответы [ 2 ]

41 голосов
/ 18 июля 2011

Ваш цикл находится внутри блока (синтаксис ^{...}). Блоки не могут изменять переменные вне блока без этой переменной, имеющей спецификатор __block.

11 голосов
/ 18 июля 2011

Вы пытались получить доступ к этому int внутри блока.Отметьте его как __block, чтобы его можно было обновить из блока.

Темы программирования блоков

...