Xcode 6.3中的“打开设置”警告问题:“UIApplicationOpenSettingsURLString”的地址与“空指针”的地址比较始终为真

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

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

代码是在很多答案和问题在计算器。

问题出在Xcode 6.3上,我有一个警告说:

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

有趣的是,苹果正在使用它的示例代码:
https://developer.apple.com/library/ios/samplecode/AppPrefs/Listings/RootViewController_m.html

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

解决了:

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

截图

如果目标是8.0或以上,则比较总是如此,因为你总是超过8.0。 所以我们不需要validation:

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

另一种select可以是:

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

我相信这是因为&UIApplicationOpenSettingsURLString从来没有在这个版本中,所以你可以直接使用以下来启动设置:

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