iOS位置服务请求打开应用程序

iOS位置服务请求打开应用程序,ios,objective-c,xcode,cllocationmanager,Ios,Objective C,Xcode,Cllocationmanager,只是尝试将位置服务添加到我的应用程序(在ObjC中)。我只希望权限提示在我即将使用它时出现,但是当我第一次打开应用程序时会出现提示 我的印象是,只有在CLLocationManager对象上调用startUpdatingLocation时,才会出现提示。但是,这仅在我的应用程序中在某些ViewController上调用(绝对不是我的第一个view controller) 有趣的是,这个问题只出现在iOS8中,在iOS7中没有问题。有人有类似的问题吗?或者你知道还有什么问题吗 谢谢。在不知道代码放

只是尝试将位置服务添加到我的应用程序(在ObjC中)。我只希望权限提示在我即将使用它时出现,但是当我第一次打开应用程序时会出现提示

我的印象是,只有在
CLLocationManager
对象上调用
startUpdatingLocation
时,才会出现提示。但是,这仅在我的应用程序中在某些ViewController上调用(绝对不是我的第一个view controller)

有趣的是,这个问题只出现在iOS8中,在iOS7中没有问题。有人有类似的问题吗?或者你知道还有什么问题吗


谢谢。

在不知道代码放在哪里的情况下,我处理这个问题的方法是

  • 创建一个请求位置访问的方法,即-(void)findLocationAsk
  • 现在不要在应用程序启动时调用此方法,因为您不希望出现这种行为
  • 在视图控制器中调用此方法
  • 您可以在viewDidLoad中调用它,或将其作为按钮操作调用,或将其作为计时器启动
这应该注意应用程序启动时的提示

更新: 在iOS 8上启动时,您的应用程序将立即提示进行位置访问。这是因为在plist文件中检测到“必需的背景模式”必需的密钥。你唯一能做的就是让这条消息更具描述性,说明你为什么需要访问。将此密钥和描述对添加到plist文件中,并在其中添加您喜欢的任何解释文本

NSLocationWhenUse用途说明
如果检测到失败的登录尝试,并且您想知道它是谁,请授予此应用访问您的位置的权限。iOS 8更改了位置服务的处理方式,这也意味着如果您支持旧版本的操作系统,您可能需要进行一些额外的编码。要详细了解整个过程,请签出

在iOS 8之前,调用
startUpdatingLocation
会提示用户获得许可。虽然现在请求权限和启动位置更新是分开的,您需要在使用授权时调用
requestwhenuseauthorization
requestAlwaysAuthorization

不仅如此,在iOS8中,您还需要显式添加两个plist键,然后定义它们的值:
nsLocationWhenUsageDescription
NSLocationAlwaysUsageDescription
,这两个字符串将显示在通知用户您的应用程序正在请求位置信息的警报中


但是说真的,看看链接。这在解释这一切方面是惊人的,比我在这里总结的要好得多

您在哪里添加了CLLocationManager的代码?应用程序内代理在启动时正确吗?@SamB感谢您的回复。不,除了在我的
SearchViewController
中没有提到CLLocationManager,我在这里进行基于位置的搜索。@LouisTur
nsLocationWhenUsageDescription
。这是必需的,对吗?请看下面我的更新答案这是逻辑思维,我在我的一些应用程序中尝试过这一点,但由于一些不合逻辑的原因,iOS8无法以这种方式工作。它会强制您在包含CLLocationManager的适用类上发出通知。@SASmith刚刚在一个新的测试iOS 8应用程序上测试了这一点,您是对的。这真的很糟糕。我不知道它为什么被更改。所以要确认一下,以后没有办法请求权限吗?仅在启动时??感谢链接。我以前读过,它非常有用。不幸的是,我已经做了所有这些(在iOS8中要求单独烫发),但我仍然有这个问题。一旦应用程序在plist中看到
nslocationwhenUsageDescription
,它就会提示。非常烦人您在使用授权时何时调用
请求?您是否正在实施委托方法
didChangeAuthorizationStatus
?清理和清除派生数据后也会得到相同的结果?当用户单击按钮时,我会发出警报,询问他们是否愿意授予权限。如果是这样,我运行
If([self.locationManager respondsToSelector:@selector(requestwhenuseauthorization)]{[self.locationManager requestwhenuseauthorization];}[self.locationManager startUpdatingLocation]如链接中建议的那样。