iOS 执行请求代码时不请求定位服务

iOS not requesting location services when request code executes

我正在开发的 iOS 应用程序 (Objective C) 中出现了一个奇怪的错误。我在创建并存储为根视图控制器 class 的实例变量的对象中使用位置服务。此对象在 viewDidLoad 方法中初始化。

if (sunEventObject == nil) {
  sunEventObject = [[SunEvent alloc] init];
}

[sunEventObject updateLocation];

我一直在运行解决应用程序在首次启动时不请求位置服务的问题。我的设备上有 运行 应用程序,同时使用 Xcode 调试并在

上设置了断点
[locationManager requestAlwaysAuthorization];

行。此行存在于 SunEvent class 中指定用于刷新位置的方法中。这行代码执行了,但是应用没有请求位置服务权限。

作为解决方法,我将此代码放在我的 AppDelegate 文件中的 didFinishLaunchingWithOptions 方法中。

CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestAlwaysAuthorization];

此解决方法现在大部分时间都有效,但偶尔在首次启动(应用程序的全新下载)时,仍未请求定位服务。

我不知道问题出在哪里。同样,代码正在执行(我知道是因为使用 Xcode 调试应用程序)但应用程序并没有像它应该做的那样请求定位服务。

注意 此应用仅针对 iOS 8.x 系统开发。

更新 info.plist 文件具有正确的键和 NSLocationAlwaysUsageDescription 键的描述,所以这应该不是问题。

感谢马特,他的回答奏效了。我的错误已修复!

他的评论: "See my answer here summarizing the correct logic that you must follow: "