2014-04-30 3 views
0

Je rencontre un problème étrange avec - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;.CLGeocoder ne renvoie que le premier résultat de recherche

J'ai une liste d'emplacements à rechercher. J'ai donc fait quelque chose comme

for (Trip *trip in takenTrips) { 
    [geoCoder geocodeAddressString:trip.location completionHandler:^(NSArray *placemarks, NSError *error) { 
     //handling result 
    }]; 
} 

Mais il semble que le gestionnaire d'achèvement ne soit appelé qu'une seule fois. J'ai essayé de faire ces recherches séquentiellement. Ensuite tout va bien.

J'ai cherché pendant un moment, mais je n'ai rien trouvé de similaire. Je suis totalement déconcerté ici ...

Toute suggestion est la bienvenue!

Répondre

0

Les applications doivent être conscientes de la façon dont elles utilisent le géocodage. Règles de base pour l'utilisation efficace de cette classe: Envoyez au plus une requête de géocodage pour une action d'un utilisateur. class link

Pour résoudre votre problème que vous pourriez l'une des opérations suivantes:

  1. Do-while qui vérifie si géocodage est le traitement de géocodage
  2. NSOperationQueue à excucute un à la fois si elle complète
  3. en la completeHandle exécuter un rappel qui exécutent la prochaine géocodage
+0

Oh, je ne suis pas au courant de ça. Je le ferai séquentiellement alors. – Selkie

0

Pourquoi ne pas vous utilisez plus géocodage?

dispatch_queue_t geocoderQueue = dispatch_queue_create("geocoder.queue", DISPATCH_QUEUE_CONCURRENT); 
dispatch_apply([takenTrips count], dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ull), ^(size_t index) { 

    NSString *loc = [(Trip *)takenTrips[index] location]; 

    CLGeocoder *geoCoder = [CLGeocoder new]; 
    [geoCoder geocodeAddressString:loc completionHandler:^(NSArray *placemarks, NSError *error) { 
     CLPlacemark *placemark = [placemarks firstObject]; 
     NSLog(@"%@",placemark.postalCode); 
    }]; 
}); 

et aussi dans une file d'attente concurrente privée afin que vous puissiez avoir un grand résultat dans la performance.

Questions connexes