/ / Čakanie na dokončenie CLGeocodera pri súbežnom výpočte - ios5, Grand-Central-Dispečer, Clgeocoder

Čakanie na ukončenie CLGeocoder na súbežnom vyčíslení - ios5, grand-central-dispatch, clgeocoder

Mám nasledujúci kúsok kódu v triednej metóde

NSDictionary *shopAddresses = [[NSDictionary alloc] initWithContentsOfFile:fileName];
NSMutableArray *shopLocations = [NSMutableArray arrayWithCapacity:shopAddresses.count];

[shopAddresses enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id key, ShopLocation *shopLocation, BOOL *stop) {
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:shopLocation.address completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"Geocode failed with error: %@", error);
}
else {
shopLocation.placemark = [placemarks objectAtIndex:0];
}
[shopLocations addObject:shopLocation];
}];
}

Po vykonaní tohto kódu sa chcem vrátiťpole shopLocations ako výsledok metódy. Ak však nechcem, aby pole bolo prázdne, musím nejako počkať, kým sa nedokončia všetky vyhľadávania geokodéra.

Ako to môžem urobiť?

Vyskúšal som rôzne prístupy GCD, ale zatiaľ som nebol úspešný.

odpovede:

6 pre odpoveď č. 1

Toto môže vyriešiť Expedition_group _... funkcie:

…
dispatch_group_t group = dispatch_group_create();

[shopAddresses enumerateObjectsUsingBlock:^(id key, NSUInteger idx, BOOL *stop) {

dispatch_group_enter(group);

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:shopLocation.address completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
NSLog(@"Geocode failed with error: %@", error);
}
else {
shopLocation.placemark = [placemarks objectAtIndex:0];
}
[shopLocations addObject:shopLocation];

dispatch_group_leave(group);
}];
}];

while (dispatch_group_wait(group, DISPATCH_TIME_NOW)) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate dateWithTimeIntervalSinceNow:1.f]];
}
dispatch_release(group);

…

Používam tento druh blokov na zhromažďovanie niektorých sieťových požiadaviek.

Dúfam, že to môže pomôcť.