百度开发者论坛中有很多网友吐槽,百度SDK对ios8的支持不是很好,现对这些问题一一进行总结:
1、在info.plist文件中新增加两个键值对,Key分别为:
NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
这两个Key对应的Value都为字符串,前者用来增加用户使用GPS时附加在提示框上的友好提示“类似允许xxx使用当前定位信息等等”,后者意为在后台使用GPS时用户提示信息(iOS8才有),这个百度官方在SDK使用时有特别说明。
2、定位时会出现没有返回位置信息的信息,调用startUserLocationService时代理方法didUpdateUserLocation:没有返回位置信息,而在didFailToLocateUserWithError:中返回了错误信息,Error Domain=kCLErrorDomain Code=0 “The operation couldn’t be completed. (kCLErrorDomain error 0.)”,
2.1、这个问题有网友说在xCode6上编译就会出现,也有说在iPhone6上会出现,其实并不完全对,最靠谱的说法是在ios8及以上版本都会出现,因为这个问题本质与iOS版本相关,与硬件及开发环境无直接关联(一个本人未去证实的消息,高德地图也存在类似情况),其根本原因百度地图论坛里有网友已经解释了,与ios8的授权有关,知道这点就可以了不用细讲。
2.2、解决方案:在开启百度地图之前先调用下面代码(定义一个全局变量,否则提示会闪退)
@property (nonatomic, strong) CLLocationManager *locationMgr;
1 2 3 4 5 6 7 | if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) { //由于IOS8中定位的授权机制改变 需要进行手动授权 self.locationMgr = [[CLLocationManager alloc] init]; //获取授权认证 [self.locationMgr requestAlwaysAuthorization]; [self.locationMgr requestWhenInUseAuthorization]; } |
2.3、到上面为止,相信很多泡论坛的网友已经早看过类似的贴子了,不好使,该报错的依旧报错,其实问题已经解决了80%,还差一点点,可能的原因如下:
A、退出模拟器,重新编译运行(有效!)
B、Clean工程,删除App,重新编译运行(效果不明显)
C、还原模拟器所有设置,恢复初始值(有效!)
D、删除xCode缓存目录及文件
E、Clean工程,还原模拟器,删除缓存文件目录,退出模拟器,再重新编译运行(可行性99%,强力推荐!!)
F、如果是真机,设置–通用–还原–还原位置与隐私
2.4、值得注意的是,如果没有还原模拟器或真机还原位置隐私,位置坐标信息无法返回,但新安装的机器是OK的,所以一定要还原!!
Pingback: kCLErrorDomain Code=0终极解决方案! | 小龙虾博客 (Crayfish)