当然,系统自带的定位类不能定位的原因有很多,今天我就遇到一个很奇葩的,是自己没有考虑到位。
首先是为了方便,建了一个工具类,专门用于定位的,但始终就是不走代理,奇了怪了。。。
接下来排除原因:
1、iOS8.0以后要在info.plist添加
Privacy - Location When In Use Usage Description
或
Privacy - Location Always Usage Description
2、如果要求后台定位,则要在targets->capabilities下打开background modes,并勾选Location updates;
3、设工具类中<code>CLLocationManager</code>的实例代理为工具类,实现CLLocationManagerDelegate
方法;
4、_locationManager执行requestAlwaysAuthorization或requestWhenInUseAuthorization
方法,向系统提出权限要求;
5、iOS9.0以后要在后台定位的,要设
allowsBackgroundLocationUpdates = YES;
6、最后确定开启定位,startUpdatingLocation
,iOS9.0以后可以选择换做requestLocation。
那么好了,以上都没问题,就是不执行代理方法是怎么回事?
有人说不能在初始化的时候就设置代理,这个好像有道理,但说不过去;
有人说要类单例,一开始觉得没什么道理啊,不过死马当活马医,就试试看,果真了,给我打印出定位坐标了😱。
推测原因是,定位的代理是后台执行的,工具类很有可能超时挂掉了。。。
好了,下次记得单例的好处啦。。。