最新消息:20190529 VPS服务器已从腾讯云香港换为Vultr新加坡,主题仍用朋友推荐的大前端D8

【未解决】VirtualBox中的Mac中的Xcode的iOS/iPhone 模拟器中,使用CLGeocoder的reverseGeocodeLocation但返回的placemarks却是nil,还出现错误kCLErrorDomain error 8

iOS crifan 2118浏览 0评论

【问题】

在iOS中,使用代码:

#pragma mark -
#pragma mark CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
    //NSString *locationDesciption = [[NSString alloc] initWithString:newLocation.description];
    self.locationInput.text = [[NSString alloc] initWithString:newLocation.description];
    
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error){
        CLPlacemark *placemark = [placemarks objectAtIndex:0];
        //self.locationInput.text =placemark.subLocality;
        self.locationInput.text =placemark.ISOcountryCode;
    }];

去通过CLGeocoder的reverseGeocodeLocation获得坐标newLocation所对应的可读的地理位置文本描述信息。

但是出错,错误见图:

reverseGeocodeLocation kCLErrorDomain

错误的文字信息为:

error   NSError *   0x06d07c00
NSObject    NSObject    
_reserved   void *  0x00000000
_code   NSInteger   8
_domain __NSCFConstantString *  0x0015253c

 

【解决过程】

1.关于错误kCLErrorDomain,也找到了官网的解释

kCLErrorDomain

The domain for Core Location errors.

extern NSString *const kCLErrorDomain;
Constants

kCLErrorDomain

The domain for Core Location errors. This value is used in the NSError class.

Available in iOS 2.0 and later.

Declared in CLErrorDomain.h.

但是很明显,没有具体解释原因,所以没法帮助解决问题。

 

2.最后是从

didFailWithError: Error Domain=kCLErrorDomain Code=0 “The operation couldn’t be completed. (kCLErrorDomain error 0.)”

找到

Location Manager Error : (KCLErrorDomain error 0)

得知Apple的电脑中,有对应的无线(Wi-Fi)管理软件Airport。

而对应的上述的CLGeocoder去执行坐标转换为地理信息,是通过底层的CoreLocation实现的。

而CoreLocation是依赖于当前网络的。

而当前在Xcode中是使用iOS模拟器调试代码的。

所以,此处iOS模拟器,只是使用Ethernet链接网络的话,CoreLocation就无效了。

所以要去开启Airport。

3.结果,由于我的Mac是在VirtualBox中安装的,所以里面没有无线网卡,导致:

系统偏好设置->网络:

preference network

里面没有Airport:

no wifi

所以也就无法开启Airport,无法使用Wifi。

也尝试了通过向导创建Wifi,未成功。

也去试了试搜索Airport,但是还是打开的上述页面。

4.去VirtualBox中看了看,结果也找不到有什么虚拟的无线网卡供选择的:

virtualbox no wireless card

所以,貌似现在无法解决此问题,无法开启VirtualBox中的Mac的Airport。

 

【总结】

CLGeocoder的reverseGeocodeLocation出现kCLErrorDomain的原因,在于用的是Xcode的iOS模拟器中,没有无线网络,导致CLGeocoder所依赖的底层的CoreLocation出错。

解决办法是:开启Mac的Airport即可。

但是,我此处由于Mac是VirtualBox中的虚拟的Mac,而主机Win7中没有无线网卡,同时VirtualBox也没有对应的虚拟的无线网卡,所以没法使用VirtualBox中的Mac的Airport了。

不知道以后如果可能的话,Win7主机中有无线网卡的时候,VirtualBox中是否会出现对应的虚拟无线网卡供选择,以及Virtualbox中的Mac是否可以使用Airport。

转载请注明:在路上 » 【未解决】VirtualBox中的Mac中的Xcode的iOS/iPhone 模拟器中,使用CLGeocoder的reverseGeocodeLocation但返回的placemarks却是nil,还出现错误kCLErrorDomain error 8

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (3)

  1. 误人子弟,错误的。在设备上也是如此,没有经过验证的结果不要凭猜测去臆断它的有效性。这个原因应该是因为模拟器默认定位在美国,而境外经纬度一律不能解析的。
    Karsa7年前 (2013-01-25)回复
    • 1.我上面的总结,没有写清楚所总结的原因,是推测出来的,并没有证实。这的确是我的不严谨。 不过,相信多数的读者,可以从全文中看出来,我所经过的尝试,的确是没有证实出该结果的,即只是我个人的推测而已。 2.模拟器的默认是苹果的美国总部的,这个之前已证实。 3.并且也可以手动模拟更改位置的。也已证实。 4.请问你的“这个原因应该是因为模拟器默认定位在美国,而境外经纬度一律不能解析的。”是否经过了证实?
      crifan6年前 (2013-01-29)回复
      • 嗯 境外的经纬度不能解析出来
        jacket4年前 (2015-08-20)回复
68 queries in 0.087 seconds, using 18.87MB memory