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
是不是做这个的好地方。
在我的应用程序中,我有以下代码;
- (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
是不是做这个的好地方。