自从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版本中并非如此。
有什么想法发生了什么?
答案 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
_reverseGeocoder.delegate = nil;
[_reverseGeocoder autorelease];
答案 4 :(得分:1)
即使我的MKReverseGeocoder
代码遵循Apple示例之一(MKReverseGeocoder
作为全局autorelease
变量),我也遇到了同样的问题。此问题也只出现在iOS 4.3上(4.0运行没有问题)。
解决了我的问题是删除autorelease
部分并仅在视图的MKReverseGeocoder
中发布dealoc
。
答案 5 :(得分:1)
在地理编码器找到地标之前,您可能正在停止位置管理员。在didFind Placemark中进行或出错