如何在iOS 4.3中处理MKReverseGeocoder / PBHTTPStatusCode = 503错误?

时间:2011-03-08 13:02:33

标签: ios mkreversegeocoder

自从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版本中并非如此。

有什么想法发生了什么?

6 个答案:

答案 0 :(得分:5)

确保在发生故障时不要过早释放反向地理编码器:

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

答案 1 :(得分:4)

Google不允许单个设备在60秒内多次检索其位置,因此当(MKReverseGeocoder *)geocoder didFailWithError时,使用另一种方法(而不是需要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"];
    }
}

答案 2 :(得分:2)

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

依赖于MKReverseGeocoder的应用程序(如Gowalla)将对Apple产生一些压力......所以我希望这些天能有一个4.3.1的修补程序。或Google可以通过Apple请求更改其SLA。

答案 3 :(得分:1)

根据zippo77的回答,我在-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error

中首先将MKReverseGeocoder委托设置为nil时找到了最佳结果
_reverseGeocoder.delegate = nil;
[_reverseGeocoder autorelease];

答案 4 :(得分:1)

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

解决了我的问题是删除autorelease部分并仅在视图的MKReverseGeocoder中发布dealoc

答案 5 :(得分:1)

在地理编码器找到地标之前,您可能正在停止位置管理员。在didFind Placemark中进行或出错