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

时间:2015-04-10 10:44:23

标签: ios objective-c uiapplication xcode6.3

我没有发明轮子。在iOS8中,要使用此代码在应用程序内打开“设置”:

BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);

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

代码在stackoverflow中有很多答案和问题。

问题出现在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

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

2 个答案:

答案 0 :(得分:14)

<强>解决:

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

screenshot

如果目标是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];
}

答案 1 :(得分:1)

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

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