高德定位 SDK 集成的过程中,配置完所需要的 key 后,正事开始编写 code 完成后编译调试,抛出了如下异常:
Error Domain=AMapLocationErrorDomain Code=5 "取消" UserInfo={NSLocalizedDescription=取消}
注:所触发异常的环境为 AMapLocation (2.6.1) ,若版本不同,如下异常处理方式仅供参考,同时也希望能有所帮助。
因需求仅需要获取定位一次,不需要实时监听,所以调用了 API 中的单次方法:
/**
* @brief 单次定位。如果当前正在连续定位,调用此方法将会失败,返回NO。\n该方法将会根据设定的 desiredAccuracy 去获取定位信息。如果获取的定位信息精确度低于 desiredAccuracy ,将会持续的等待定位信息,直到超时后通过completionBlock返回精度最高的定位信息。\n可以通过 stopUpdatingLocation 方法去取消正在进行的单次定位请求。
* @param withReGeocode 是否带有逆地理信息(获取逆地理信息需要联网)
* @param completionBlock 单次定位完成后的Block
* @return 是否成功添加单次定位Request
*/
- (BOOL)requestLocationWithReGeocode:(BOOL)withReGeocode completionBlock:(AMapLocatingCompletionBlock)completionBlock;
导致异常会有两种可能:
异常状况一:
初始化 AMapLocationManager 这个对象的时候没有声明成为全局属性,导致无法获取到 block 回调用的 regeocode 数据信息;
解决方法:
/** 高德定位*/
@property (nonatomic, strong) AMapLocationManager *locationManagerGaoDe;
将该对象声明为全局属性即可。
异常状况二:
方法中有个 withReGeocode 的布尔参数,期初传入参数为 NO,也导致方法执行后回调 block 中的 regeocode 数据信息为 nil;
解决方法:
self.locationManagerGaoDe = [[AMapLocationManager alloc] init];
[self.locationManagerGaoDe setDelegate:self];
[self.locationManagerGaoDe requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
// do somethings
}];
将方法中的 withReGeocode 参数字段设置为 YES 后即可。
以上便是此次分享的内容,希望内容能对大家实际有所帮助,有什么不足之处欢迎指点共同进步!
网友评论