年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3091|回复: 0

v2.5.0适配ios8,解决定位问题(亲测可用!!)

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-12-4 15:55:36 | 显示全部楼层 |阅读模式
    百度开发者论坛中有很多网友吐槽,百度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、解决方案:在开启百度地图之前先调用下面代码(定义一个全局变量,否则提示会闪退)
    1. @property (nonatomic, strong) CLLocationManager *locationMgr;
    复制代码
    1.     if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
    2.         //由于IOS8中定位的授权机制改变 需要进行手动授权
    3.         self.locationMgr = [[CLLocationManager alloc] init];
    4.         //获取授权认证
    5.         [self.locationMgr requestAlwaysAuthorization];
    6.         [self.locationMgr requestWhenInUseAuthorization];
    7.     }
    复制代码
    2.3、到上面为止,相信很多泡论坛的网友已经早看过类似的贴子了,不好使,该报错的依旧报错,其实问题已经解决了80%,还差一点点,可能的原因如下:
    A、退出模拟器,重新编译运行(有效!)
    B、Clean工程,删除App,重新编译运行(效果不明显)
    C、还原模拟器所有设置,恢复初始值(有效!)
    D、删除xCode缓存目录及文件(参考:http://www.yusian.com/bbs/thread-8315-1-2.html
    E、Clean工程,还原模拟器,删除缓存文件目录,退出模拟器,再重新编译运行(可行性99%,强力推荐!!)
    F、如果是真机,设置--通用--还原--还原位置与隐私

    2.4、值得注意的是,如果没有还原模拟器真机还原位置隐私,位置坐标信息无法返回,但新安装的机器是OK的,所以一定要还原!!




    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-4-18 20:02 , Processed in 0.053725 second(s), 22 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表