最近做的项目里用到了定位,不是地图定位,只是单纯的获取经纬度,甚至都不用转化为具体的地理信息,原本以为很好做的,但是写了几个小时才搞好,中间遇到几个问题,现在记下来吧。
首先一个问题是,在模拟器中,遵守了协议,设置了代理,却不走代理方法,为什么呢,这是因为xcode升级造成的定位权限设置问题。
升级xcode6以后打开以前xcode5工程,程序不能定位。工程升级到xcode6编译时需要iOS8 要自己写授权,不然没权限定位。
解决方法:
首先在 info.plist里加入对应的缺省字段 ,值设置为YES(前台定位写上边字段,前后台定位写下边字段)
NSLocationWhenInUseUsageDescription //允许在前台获取GPS的描述
NSLocationAlwaysUsageDescription //允许在前、后台获取GPS的描述
然后在代码中写上
if ([[[UIDevice currentDevice] systemVersion] doubleValue] > 8.0)
{
//设置定位权限 仅ios8有意义
[self.locationManager requestWhenInUseAuthorization];// 前台定位
// [locationManager requestAlwaysAuthorization];// 前后台同时定位
}
[self.locationManager startUpdatingLocation];
这样就可以定位了,现在可能还会遇到另一个问题:
Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed.
是的,走了报错的代理方法,如果你是真机的话应该没有这个问题,但是我是用的模拟器,我的做法是,重置模拟器,然后再设置模拟器的位置信息:调试 =》位置=》自定义
这样就可以了!