最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

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

iOS crifan 6143浏览

【问题】

在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

86 queries in 0.220 seconds, using 19.24MB memory