2014-03-26 59 views
1

我正在通过Web服务和地理编码接收纬度和经度列表,然后获取完整地址。 问题是,一段时间后,它们变为空,地理编码器停止工作! 有人能帮助我吗?Geocoder在一段时间后返回null

下面是我使用以获取地址代码:

-(void)getAddressArray:(void (^)(id response))completion{ 
for (int i=0; i<[favoritos count]; i++) { 

    double latitude = [[[favoritos valueForKey:@"latitude"] objectAtIndex:i] doubleValue]; 
    double longitude = [[[favoritos valueForKey:@"longitude"] objectAtIndex:i] doubleValue]; 
    CLLocationCoordinate2D location = CLLocationCoordinate2DMake(latitude, longitude); 
    CLLocation * locationAtual = [[CLLocation alloc]initWithLatitude:location.latitude longitude:location.longitude]; 
    CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 

    [geocoder reverseGeocodeLocation:locationAtual completionHandler:^(NSArray *placemarks, NSError *error) { 
     NSDictionary *dicAddress; 

     CLPlacemark *place = [placemarks firstObject]; 

     if (placemarks) { 
      NSLog(@"%@",place.addressDictionary); 
      if ([place.addressDictionary valueForKey:@"Thoroughfare"] == [NSNull null] || ![place.addressDictionary valueForKey:@"Thoroughfare"]) { 
       dicAddress = @{@"id":[[favoritos objectAtIndex:i] valueForKey:@"id"],@"address":@"Endereço não encontrado!",@"complemento":[[favoritos objectAtIndex:i] valueForKey:@"references"],@"number":[[favoritos valueForKey:@"numero"] objectAtIndex:i],@"name":[[favoritos valueForKey:@"name"] objectAtIndex:i], @"latitude":[[favoritos valueForKey:@"latitude"] objectAtIndex:i], @"longitude":[[favoritos valueForKey:@"longitude"] objectAtIndex:i]}; 
      } 


      [address addObject:dicAddress]; 

      if ([address count] == [favoritos count]) 
       completion(address); 
     }  
}]; 
} 

谢谢!

回答

1

检查传入该块的错误,可能是发送给很多请求并达到速率限制。

有速率限制reverseGeocodeLocation:completionHandler:

的地址解析请求的速率限制为每个应用程序,在很短的时间内使拍过多 请求可能会导致一些请求到 失败。当超过最大速率时,地理编码器将具有值kCLErrorNetwork的错误 对象传递给完成处理程序。

+1

谢谢,我不知道这个速度。 –