【问题标题】:CLGeocoder reverseGeocodeLocation returns 'kCLErrorDomain error 9'CLGeocoder reverseGeocodeLocation 返回“kCLErrorDomain 错误 9”
【发布时间】:2012-03-20 13:22:47
【问题描述】:

我正在根据这篇文章开发一个具有反向地理编码功能的 iOS 应用程序:geocoding tutorial

但是当我在模拟器上进行这样的测试时,我得到“kCLErrorDomain 错误 9”。我搜索了很多,只有错误 0 或 1 而不是 9。

这是我在viewDidLoad中的代码:

self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.delegate = self;
self.locationManager.distanceFilter = 80.0;
[self.locationManager startUpdatingLocation];

CLGeocoder *geocoder = [[[CLGeocoder alloc] init] autorelease];
[geocoder reverseGeocodeLocation:self.locationManager.location 
   completionHandler:^(NSArray *placemarks, NSError *error) {
       NSLog(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");

       if (error){
           NSLog(@"Geocode failed with error: %@", error);            
           return;

       }

       if(placemarks && placemarks.count > 0)

       {
           //do something   
           CLPlacemark *topResult = [placemarks objectAtIndex:0];
           NSString *addressTxt = [NSString stringWithFormat:@"%@ %@,%@ %@", 
                                   [topResult subThoroughfare],[topResult thoroughfare],
                                   [topResult locality], [topResult administrativeArea]];
           NSLog(@"%@",addressTxt);
       }
   }];

非常感谢。

【问题讨论】:

  • 模拟器现在返回错误 8,而我没有对我的代码做任何事情。
  • CLLocationManager, CLGeocoder 不能在模拟器上工作。它只会在设备上调试或在设备上测试时显示结果。在模拟器上会显示错误。
  • 这在我的 iPhone 4 设备上就像一个魅力。谢谢!
  • 你必须确保你在模拟器中模拟位置

标签: ios core-location reverse-geocoding


【解决方案1】:

核心位置错误代码是documented here

代码值 8、9 和 10 是:

kCLErrorGeocodeFoundNoResult,
kCLErrorGeocodeFoundPartialResult,
kCLErrorGeocodeCanceled

根据显示的代码,您收到错误 8 的最可能原因是它试图在调用 startUpdatingLocation 后立即使用 location,此时它可能仍然是 nil

获取当前位置通常需要几秒钟,在此之前它很可能是 nil(导致地理编码错误 8 或 kCLErrorGeocodeFoundNoResult)。我不确定“FoundPartialResult”的错误代码 9 是什么意思,但 Apple 的 GeocoderDemo 示例应用程序对两者的处理方式相同(如“无结果”)。

尝试将地理编码代码(startUpdatingLocation 调用之后的所有代码)移动到委托方法 locationManager:didUpdateToLocation:fromLocation:。位置管理器将在实际拥有位置时调用该委托方法,只有这样才能安全使用location

在那里,在地理编码成功(或不成功)之后,您可能需要调用stopUpdatingLocation 否则它会在每次更新用户位置时尝试地理编码。

在尝试对其进行地理编码之前,您可能还想检查接收到的位置的准确性 (newLocation.horizontalAccuracy) 和年龄 (newLocation.timestamp)。

【讨论】:

  • 谢谢。根据您的建议移动我的代码后,即使我将 CCLocation 设置为 CLLocation *location = [[CLLocation alloc] initWithLatitude:37.78583400 longitude:-122.40641700];,它也会显示错误 9。可能模拟器有问题,我准备在我的设备上测试一下。
【解决方案2】:

事实证明,我在创建位置时混淆了经度和纬度。我想我会添加这个作为供人们检查的东西。

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 2014-03-04
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多