6

从 iOS 4.3 (GM Seed 10M2518) 开始,我在使用MKReverseGeocoder. reverseGeocoder:didFailWithError:经常被这样的错误调用:

Error Domain=NSURLErrorDomain Code=-1011 "The operation couldn’t be completed. (NSURLErrorDomain error -1011.)" UserInfo=0x339900 {PBHTTPStatusCode=503}

该应用程序往往会在这些时刻崩溃。在以前的 iOS 版本中,情况并非如此。

任何想法发生了什么?

4

6 回答 6

5

确保您不会在失败时过早释放反向地理编码器:

更改[_reverseGeocoder release][_reverseGeocode autorelease]in -(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error为我解决了问题。

于 2011-03-14T14:01:39.260 回答
4

Google 不允许单个设备在 60 秒内多次检索其位置,因此在 (MKReverseGeocoder *)geocoder didFailWithError 时使用另一种方法(而不是 http 请求,需要 JSON)。

它适用于我的 4.3.3 (3GS) 并测试了 30-40 次连续检索用户的位置而没有崩溃,希望它有所帮助!

- (void) retrieveCurrentLoc {
self.geoCoder =
[[[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate] autorelease];
    geoCoder.delegate = self;

    [geoCoder start];
}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{

NSString *fetchURL = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?    q=%@,%@&output=json&sensor=true", [NSString     stringWithFormat:@"%f",mapView.userLocation.location.coordinate.latitude], [NSString      stringWithFormat:@"%f",mapView.userLocation.location.coordinate.longitude]];
    NSURL *url = [NSURL URLWithString:fetchURL];
    NSString *htmlData = [NSString stringWithContentsOfURL:url];

SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *json = [parser objectWithString:htmlData error:nil];
NSArray *placemark = [json objectForKey:@"Placemark"];
if ([[[[[placemark objectAtIndex:0]     objectForKey:@"AddressDetails"]objectForKey:@"Country"]objectForKey:@"Thoroughfare"]objectFor  Key:@"ThoroughfareName"] != NULL){
    currentAddress = [[[[[placemark objectAtIndex:0]     objectForKey:@"AddressDetails"]objectForKey:@"Country"]objectForKey:@"Thoroughfare"]objectFor  Key:@"ThoroughfareName"];}
else {
    currentAddress = [[placemark objectAtIndex:0] objectForKey:@"address"];
    }
}
于 2011-07-21T15:10:05.440 回答
2

同样的问题,我们检查了各种解决方案,但没有奏效。以前的操作系统对 503 响应代码的处理方式有所不同,您可以通过嗅探 iPhone 流量轻松注意到这一点。

依赖 MKReverseGeocoder(如 Gowalla)的应用程序将对 Apple 施加一些压力……所以我预计这些天会出现 4.3.1 修补程序。或者 Google 会根据 Apple 请求更改他们的 SLA。

于 2011-03-11T11:46:49.677 回答
1

即使我的MKReverseGeocoder代码遵循 Apple 示例之一(MKReverseGeocoder作为全局autorelease变量),我也遇到了同样的问题。此外,该问题仅出现在 iOS 4.3 上(4.0 运行没有问题)。

对我来说解决问题的是移除autorelease部分并释放视图MKReverseGeocoder中的唯一部分dealoc

于 2011-04-28T12:37:46.483 回答
1

继 zippo77 的回答之后,我在将 MKReverseGeocoder 委托设置为 nil 时发现了最好的结果-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error

_reverseGeocoder.delegate = nil;
[_reverseGeocoder autorelease];
于 2011-04-07T09:36:40.903 回答
1

在地理编码器找到地标之前,您可能正在停止位置管理器。在 didFindPlacemark 或错误中执行

于 2011-08-09T10:37:27.337 回答