В моем приложении есть вид Google Map, который заполняется булавками с помощью геокодирования. Я использую приведенный ниже код для создания очереди отправки, которая затем запрашивает у Google долготу и широту для каждого места в моем приложении.
Проблема в том, что, хотя приведенный ниже код работает в некоторой степени, кажется, что он пропускает большой процент элементов при первом запуске. Эти элементы добавляются в массив failLoad в соответствии с кодом ниже.
В данный момент я запускаю второй метод для добавления мест в failedLoad, который вызывается всякий раз, когда вызывается метод ViewDidLoad. Однако это плохое решение, так как даже после запуска второго метода все еще есть элементы в failLoad, и я также предпочел бы загружать все выводы без использования ViewDidLoad (который вызывается только если пользователь нажимает на вывод, а затем возвращает из представленного подробного экрана).
Кто-нибудь может предложить хороший способ улучшить этот процесс?
Спасибо
-(void)displayPlaces {
for (PlaceObject *info in mapLocations) {
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^
{
// GET ANNOTATION INFOS
NSString * addressOne = info.addressOne;
NSString * name = info.name;
NSString * postCode = info.postCode;
NSString * addressTwo = [addressOne stringByAppendingString:@",London,"];
NSString * address = [addressTwo stringByAppendingString:postCode];
NSError * error;
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString ] encoding:NSASCIIStringEncoding error:&error];
NSArray *listItems = [locationString componentsSeparatedByString:@","];
double latitude = 0.0;
double longitude = 0.0;
if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
latitude = [[listItems objectAtIndex:2] doubleValue];
longitude = [[listItems objectAtIndex:3] doubleValue];
}
else {
NSLog(@"Error %@",name);
[failedLoad addObject : info];
}
CLLocationCoordinate2D coordinate;
coordinate.latitude = latitude;
coordinate.longitude = longitude;
MyLocation *annotation = [[[MyLocation alloc] initWithName:name address:address coordinate:coordinate] autorelease];
dispatch_sync(dispatch_get_main_queue(), ^{
// ADD ANNOTATION
[mapViewLink addAnnotation:annotation];
});
});
}