嵌入式框架中的 CLLocationManager 实例不请求授权?

Posted

技术标签:

【中文标题】嵌入式框架中的 CLLocationManager 实例不请求授权?【英文标题】:CLLocationManager instance in embedded framework not requesting authorization? 【发布时间】:2015-01-30 14:02:13 【问题描述】:

我正在开发一个使用CLLocationManager 执行一些BeaconRegion 监控的嵌入式框架。框架中的CLLocationManager 实例不会向用户请求授权。我错过了什么?

NSLocationAlwaysUsageDescription 是在应用程序和框架的 Info.plist 文件中设置的,这是肯定的。

已设置应用的后台功能位置更新使用蓝牙 LE 配件

我正在尝试这样请求授权:

- (void)requestPermissionsIfNecessary 
    if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
        [_locationManager requestAlwaysAuthorization];
     else 
        NSLog(@"_locationManager does not respond to 'requestAlwaysAuthorization'!");
        NSLog(@"CLAuthorizationStatus: %d", [CLLocationManager authorizationStatus]);
     
    

_locationManager 不响应选择器,CLAuthorizationStatus 为 0 (kCLAuthorizationStatusNotDetermined)。

我正在 ios 8.1.1 iPhone 6 Plus 上进行测试。

有什么帮助吗?提前致谢!

编辑:

现在至少我可以进行_locationManager 请求授权。不知道为什么它现在要求它。 但是,locationManager:didChangeAuthorizationStatus: 委托方法再次报告kCLAuthorizationStatusNotDetermined 的状态。听起来像是Info.plist 问题?

【问题讨论】:

请调试并查看_locationManager的值。也许它是 nill,或者是 CCLocationManager 以外的其他类? 刚刚做了,_locationManager ivar 已正确初始化并且属于 CLLocationManager 类。太糟糕了,修复起来并不容易。 :// 【参考方案1】:

延迟请求解决了我的问题。

当我的rootViewControllerviewDidLoad 方法在顶层触发时,它总是被拒绝。只需一秒钟左右,单击按钮即可请求授权,效果非常好。当CLLocationManager 经常在项目中而不是在嵌入式框架中使用时,从未经历过这种行为。事实上,我之前在一个项目中使用了完全相同的实现,一切都很好。

【讨论】:

以上是关于嵌入式框架中的 CLLocationManager 实例不请求授权?的主要内容,如果未能解决你的问题,请参考以下文章

CLLocationManager:没有调用 didChangeAuthorization 和 didRangeBeacons

iOS 8 中的 CLlocationManager 问题

CLLocationmanager 中的 GPS 位置更新

CLLocationManager 和 iPhone 中的航向度数

导入框架与模块

为啥 CLLocationManager 在模拟器中的 iphone SDK 4 beta 上返回空位置?