Ios Xcode 6.3中的打开设置警告问题:比较';UIApplicationOpenSettingsURLString&x27;不等于空指针始终为真
我不是在发明轮子。在iOS8中,要从应用程序内部打开设置,我使用以下代码:Ios Xcode 6.3中的打开设置警告问题:比较';UIApplicationOpenSettingsURLString&x27;不等于空指针始终为真,ios,objective-c,uiapplication,xcode6.3,Ios,Objective C,Uiapplication,Xcode6.3,我不是在发明轮子。在iOS8中,要从应用程序内部打开设置,我使用以下代码: BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL); if (canOpenSettings) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication]
BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);
if (canOpenSettings)
{
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
代码在stackoverflow中的许多答案和问题中
Xcode 6.3出现了问题,我得到了警告:
不等于空指针的“UIApplicationOpenSettingsURLString”地址的比较始终为真
有趣的是,苹果在他们的示例代码中使用了它:关于如何避免警告并仍然检查是否可以打开设置的一些想法?已解决: 该问题与应用程序中的部署目标有关 如果目标值为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在此版本中从不为零,因此您可以直接使用以下命令启动设置:
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
上次更新后面临类似问题,目前尚未找到任何解决方案。您提到的示例代码最近一次更新是在2014年9月17日。嗯,我已经在这里看过答案了。但是没有什么能真正帮助我。如果你想看一看,我已经在这里发布了我的问题:)哦,是的,你的问题可以通过这种方式解决,但我的问题更复杂。这个新警告真正让人恼火的是,如果你在iOS和OS X之间共享代码,随着你必须检查的符号数量的增加,您将被迫在一个平台上容忍此警告以避免在另一个平台上发生崩溃的概率接近1。。。。可能有一种方法可以通过pragma或编译器设置来消除警告,但我不知道是什么设置。我被告知,您可以通过在编译器标志中添加-Wno同义反复指针compare来全局禁用警告,或者通过在括号中包装“&whatever”一次性禁用警告。在其他行为中该怎么办?