iOS8.0之前的定位
1. 测试环境:
- XCode7.0之前版本,例如XCode6.4版本;模拟器选择iOS8.0之前的版本
- 原因 : XCode7.0(包含7.0)之后不支持iOS8.0之前的模拟器
2. 前台定位
// 1.导入CoreLocation框架以及对应的主头文件
#import <CoreLocation/CoreLocation.h>
// 2.创建CLLocationManager对象并设置代理
self.locationM = [[CLLocationManager alloc] init];
self.locationM.delegate = self;
// 2.1 在定位前可设置位置管理者CLLocationManager相关属性,如精确度,定位距离等
// self.locationM.distanceFilter = 100;
// self.locationM.desiredAccuracy = kCLLocationAccuracyBest;
// 3. 调用方法,开始更新用户位置信息
[self.locationM startUpdatingLocation];
// 4. 在对应的代理方法中获取位置信息
-(void)locationManager:(nonnull CLLocationManager *)manager didUpdateLocations:(nonnull NSArray<CLLocation > *)locations
{
NSLog(@"每当请求到位置信息时, 都会调用此方法");
}
3. 后台定位
-
在前台定位基础上, 勾选后台模式Location updates
4. 定位额外设置
- 可通过位置管理者来进行额外设置,如每隔多少米定位一次、定位精确度等
- CLLocationManager(位置管理者)
5. 知识补充
- 定位常识
定位服务 | 标准定位服务 | 显著的位置变化定位服务 |
---|---|---|
定位规则 | 基于gps/基站/wifi定位, 具体使用哪种,苹果有自己规则 | 使用基站进行定位,所以必须要求设备有电话模块 |
能否后台处理 | 程序关闭,就没法获取位置 | 当app被完全关闭时,也可以接收到位置通知,并让app进入到后台处理 |
定位精度 | 高 | 定位精度相比于左面,精度不大 |
耗电 | 高 | 耗电小,而且定位更新频率依据基站密度而定 |
应用场景 | 要求定位及时,精度较高,并且运行时间较短 | 长时间监控用户位置,用户移动速度比较快(例如打车软件) |
6. 常见问题总结
- 定位不到, 对应的代理方法不执行
- 检查运行的模拟器是否是iOS8.0之前的系统版本
- 检查模拟器是否设置位置数据
- 确保代码无问题(一般都是代理没有设置,或者位置管理器对象是局部变量,亦或是位置管理器对象没有被强引用)
- 绝逼是模拟器BUG, 请重置模拟器(是重置,不是重启)