App 进入 LocationManager 批准循环

App get in LocationManager approval loop

在我的应用程序中,我有以下代码;

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Start location services
    if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.locationManager requestAlwaysAuthorization];
    }
    locationManager = [[CLLocationManager alloc] init];
    etc...

不知何故,当我进行全新安装时,一旦启动位置管理器,应用程序就会进入循环,重复 "Do you allow this app to use Location Services"-对话框的速度比我单击“确定”或“取消”的速度还快。

跳出该循环的方法是切换到“设置”并手动 批准使用。

这是 iOS8,我确实在 .plist 中添加了强制字符串。

我该怎么办?

您可以在请求授权之前初始化 CLLocationManager,但我也建议不要立即分配权限。 link 这里有一篇关于请求许可的最有效方法的好文章:http://techcrunch.com/2014/04/04/the-right-way-to-ask-users-for-ios-permissions/

您的问题是您在 applicationDidBecomeActive 中请求权限 - 当显示权限对话框时,您的应用程序变为非活动状态(因为有一个系统对话框处于活动状态),然后一旦对话框被关闭,它就会变为再次激活 - 但权限尚未处理,因此显示对话框等。

您应该以另一种方法请求位置权限 - applicationDidFinishLaunchingWithOptions: 或在您的视图控制器或其他 class 您想要实例化您的 CLLocationManager - didBecomeActive 是不是做这个的好地方。