2011-07-17 20 views
19

Süreçlerimden birinin ne kadar başarı kaydettiğini saymak için bir girişimde bulundum. Kodumun dışında, şu bildirimde bulunurum:Amaç C salt okunur int? Ne?

int successes = 0.

Sonra benim döngüsünde, successes++; var, bu noktada XCode "değişkeni atanabilir değil (eksik _block türü belirteci)" şikayet ediyor.

Neler oluyor? Neden int'mı arttıramıyorum? Bunu asla okumamıştım ...

Herhangi bir yardım çok takdir edilmektedir.

Ben kullanılan kod:

_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]; 
} 
+0

__block int successes = 0; '? Kodunuzu daha iyi gösterirsiniz, çünkü bize söylemediğiniz blokları veya başka bir şey kullandığınız açıktır. – jtbandes

+0

Sadece emin olmak için, bu çok iş parçacıklı bir uygulama mı? –

cevap

40

Kişisel döngü bir blok (^{...} sözdizimi) içinde bulunur. Bloklar, __block belirticiye sahip olan değişken olmadan, blok dışındaki değişkenleri değiştiremez.

+0

Oh! Bu çok daha mantıklı. Sözdiziminin bir blok olarak adlandırıldığını anlamadım. Önündeki hangi bloğu nasıl bildiririm? '_block int successes = 0;' "Tanımlanmamış tanımlayıcı '_block'" ifadesini kullanır. – Mason

+15

İki alt çizgi. – jtbandes

+0

Çok teşekkür ederim! Cevabınız beni izin verdiği anda kabul eder. – Mason

11

Bir bloğunun içinde bu int erişen çalıştı. __block olarak işaretle, böylece bloğun içinden güncellenebilir.

Blocks Programming Topics

İlgili konular