Xcode 6.3 中的打开设置警告问题: 'UIApplicationOpenSettingsURLString' 不等于空指针的地址比较始终为真

Open Settings warning issue in Xcode 6.3: Comparison of address of 'UIApplicationOpenSettingsURLString' not equal to a null pointer is always true

我不是在发明轮子。在 iOS8 中,要从应用程序内部打开设置,我正在使用此代码:

BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);

if (canOpenSettings)
{
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    [[UIApplication sharedApplication] openURL:url];
}

代码在Whosebug的很多答案和问题中。

问题出现在 Xcode 6.3,我收到警告说:

Comparison of address of 'UIApplicationOpenSettingsURLString' not equal to a null pointer is always true

有趣的是,Apple 在他们的示例代码中使用了它:
https://developer.apple.com/library/ios/samplecode/AppPrefs/Listings/RootViewController_m.html

关于如何避免警告并仍然检查我是否可以打开“设置”的一些想法?

已解决:

问题与应用程序中的部署目标有关。

如果 Target 为 8.0 或以上,则比较将始终为真,因为您始终超过 8.0。所以我们不需要if验证:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];

另一个选项可以是:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:settings])
{
    [[UIApplication sharedApplication] openURL:settings];
}

我相信这是因为 &UIApplicationOpenSettingsURLString 在此版本中永远不会为 nil,因此您可以直接使用以下命令启动设置:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];