【问题标题】:Xcode warning when using deprecated setStatusBarHidden method使用已弃用的 setStatusBarHidden 方法时的 Xcode 警告
【发布时间】:2010-07-10 09:59:22
【问题描述】:

我在 StackOverflow 上发现了这个问题,但无法解决我的问题。

Calling the appropriate setStatusBarHidden per iOS version

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
else 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];

我将操作系统部署目标设置为 3.0,但仍然收到警告“setStatusBarHidden:animated: is deprecated”

如果可能的话,我希望项目中没有警告,而不是删除它的黑客。有没有办法设置项目来消除这个警告?

我已将项目基础 SDK 设置为 4.0。 并且目标Base SDK为4.0,部署目标SDK为3.0。

我为“所有配置”进行了这些设置

更新:显然警告只出现在模拟器中,而不是在为设备设置时出现。

【问题讨论】:

  • setStatusBarHidden:withAnimation: 中,withAnimation: 部分不需要BOOL,它需要UIStatusBarAnimation 常量。 See here

标签: iphone iphone-sdk-3.0


【解决方案1】:

弃用警告意味着您正在使用将来不支持的东西。此特定语法被列为已弃用的here。您可以通过不使用已弃用的方法来消除警告。你应该改用setStatusBarHidden:withAnimation:

如果您希望在 3.0 和 3.2+ 上都支持此功能,则必须根据目标版本编写条件代码。有一些关于预处理器宏和函数的有用信息可以帮助您here

【讨论】:

  • 但这不适用于 OS 3.0 设备。使用 OS 3.1.3 时,我的 iPod touch 因无法识别的选择器而崩溃。
  • 我不是 Iphone 开发人员,但我认为您必须在使用更高版本的特定功能之前通过调用 respondsToSelector(来自您上面的链接)来检查它是否存在
  • 严格反对投票。答案是正确的。无论如何编辑了更多信息。
  • 顺便说一句,我没有投反对票。别人做了。此外,应该有一种方法可以在代码中做到这一点,而无需预处理器指令?苹果如何允许创建 3.x 应用程序,并且在 3.x 中全屏需要弃用的方法,而无法在兼容 3 和 4 的应用程序上使用它?似乎不需要宏......对
  • 在上面更新,显然这只影响模拟器,而不是在为设备设置时。奇怪。
【解决方案2】:

这可能会有所帮助,如果您为旧设备开发,不确定最后一个但它看起来不错:

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
else if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: animated:)])
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
}
else if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden:)])
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

但是,当我将设备从 iPhone 切换到 Universal 并切换回 iPhone 后,问题就出现了。我花了一段时间才意识到部署目标已更改为 4.3,因此将其更改回 3.0 会使警告消失。

【讨论】:

    【解决方案3】:

    您可以这样执行它以立即克服警告

    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
    (void) methodUsingDeprecatedStuff { //use deprecated stuff }
    

    在每次使用您已弃用的东西之前粘贴此行以避免警告

    #pragma GCC 诊断警告“-Wdeprecated-declarations”

    这将删除警告。

    希望对你有帮助。

    【讨论】:

    • 不要忘记在已弃用的代码后面加上 #pragma clang diagnostic pop 以重新打开警告
    猜你喜欢
    • 2020-07-03
    • 2015-11-11
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2015-09-15
    相关资源
    最近更新 更多