0

ループ内の非同期ブロックの呼び出しを管理するにはどうすればよいですか?

n回呼び出される私のコード:

- (void) convertToCountries:(NSString*)time longitude:(NSString*)lon latitude:(NSString*)lat {


CLLocation *myLocation = [[CLLocation alloc] initWithLatitude:[lat doubleValue] longitude:[lon doubleValue]];


[geocoder reverseGeocodeLocation:myLocation
               completionHandler:^(NSArray *placemarks, NSError *error) {
                   NSLog(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");

                   if (error){
                       NSLog(@"Geocode failed with error: %@", error);
                       return;
                   }

                   if(placemarks && placemarks.count > 0)
                   {
                       //do something
                       CLPlacemark *topResult = [placemarks objectAtIndex:0];
                       NSString *addressTxt = [NSString stringWithFormat:@"%@, %@ %@,%@ %@", [topResult country],
                                               [topResult subThoroughfare],[topResult thoroughfare],
                                               [topResult locality], [topResult administrativeArea]];
                       NSLog(@"%@",addressTxt);

                       NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
                       [formatter setDateFormat:@"yyyy-MM-dd"];

                       //Optionally for time zone converstions
                       [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"..."]];


                       [DataOperations saveRecord:[topResult country] time:time];

                   }
               }];

}

これらの呼び出しから出力データを収集する必要があります。

どんな助けでもありがたいです。

4

1 に答える 1

1

オブジェクトにプロパティを与えますBOOL dunloadin

次に、完了ブロックで、に設定self.dunloadinYESます。

最後に、ループは次のようになります。

for (int i=0; i<10; i++)
{
    self.dunloadin = NO;
    [self convertToCountries:…];

    while (!self.dunloadin)
    {
        [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }
}

ただし、このような応急修理が必要ないように、アプリを別の方法で設計することを検討することをお勧めします。

于 2012-10-10T12:29:14.740 に答える