7

我不是在发明轮子。在 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

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

4

2 回答 2

14

解决了:

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

截屏

如果 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];
}
于 2015-04-10T11:05:23.353 回答
1

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

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
于 2015-04-10T11:11:31.460 回答