前言
公司一款App使用到了地图定位,可是从AppStore下载下来后,第一次安装完后出现了黑屏的现象。
控制台打印的信息为:
分析造成此现象的原因
由于是点击了允许定位当前用户的地位位置后出现的现象,而且第二次启动应用时是没有出现这样的现象的情况,所以考虑是由于系统定位权限造成的。
由于注释掉地图展示当前用户位置的代理方法,就不会出现这样的现象,所以考虑是由于未获得系统定位权限,地图就进行定位而造成的系统级别Bug。
解决方案
在系统的AppDegate 类中申请系统的定位,使地图在定位之前获取到系统的定位权限,即可解决这个系统级别的Bug
代码
[CLLocationManager locationServicesEnabled]
//检测的是整个iOS系统的位置服务开关,
//无法检测当前应用是否被关闭,只能通过CLLocationManagerDelegate的locationManager:didFailWithError:方法去检测:
在代理方法中查看权限是否改变
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
switch (status) {
case kCLAuthorizationStatusAuthorizedAlways: NSLog(@"Always Authorized"); break;
case kCLAuthorizationStatusAuthorizedWhenInUse: NSLog(@"AuthorizedWhenInUse"); break;
case kCLAuthorizationStatusDenied: NSLog(@"Denied"); break;
case kCLAuthorizationStatusNotDetermined: NSLog(@"not Determined"); break;
case kCLAuthorizationStatusRestricted: NSLog(@"Restricted"); break; default: break;
}}
/**
第一次执行以下语句时会有系统定位权限弹框弹出
*/
CLLocationManager *manager = [[CLLocationManager alloc] init];
[manager requestAlwaysAuthorization];//一直获取定位信息
[manager requestWhenInUseAuthorization];//使用的时候获取定位信息
权限弹框一闪而过的问是CLLocationManager的实例是局部变量在方法中被释放了,所以把它改为全局变量或静态变量就可以了。