【问题标题】:How to get rid of warnings when using Category in XCode在 XCode 中使用 Category 时如何摆脱警告
【发布时间】:2011-05-28 08:06:13
【问题描述】:

在我的代码中,我在 UIViewController 上创建了一个类别,因此我的每个 UIViewController 都有一个错误处理方法。不幸的是,现在每当我从类别中调用此方法时,我都会在 XCode 中收到以下警告:

 'MainWindowViewController' may not respond to '- (...method name...):'

我们试图让我们的代码没有任何警告,所以我想知道是否有任何聪明的方法来保留类别并在“可能不响应”警告时摆脱。

感谢您的帮助!

【问题讨论】:

    标签: iphone objective-c xcode


    【解决方案1】:

    将声明类别的标头导入使用该类别方法的实现文件应该消除该警告。

    【讨论】:

    • 我可能只是添加了可以将标头类别头文件导入到应用程序的预编译标头中,从而使类别在应用程序范围内可用。
    【解决方案2】:

    @Vladimir是对的,你需要在你的实现类中导入头文件。

    在编译代码期间收到警告可能还有一个原因,

    如果没有在头文件中声明方法,而是在实现文件中实现

    【讨论】:

      【解决方案3】:

      弗拉基米尔当然是正确的。将类别添加到类使这些函数可用于该类的所有实例,无论头文件是否为#imported。 Objective-C 是一种动态语言。

      但是 - 编译器警告您它在编译时看不到这些消息的声明。该代码仍然有效;这就是它引发警告而不是错误的原因。

      我喜欢将类别导入到需要该类别提供的扩展的类中。我发现这是一种提醒我依赖的有用方法。然而,一些程序员认为,既然一个类别为该类的所有实例提供了它的方法,那么只将它添加到一个类中是没有意义的。

      如果您不想将类别导入到使用它的每个类,但您希望进行干净的编译 - #import 将类别标头改为 pch 文件。

      【讨论】:

        【解决方案4】:

        尝试重新启动 XCode 并清理。我有同样的问题,肯定包括头文件,但仍然收到警告。重新启动并清理修复它。

        【讨论】:

          【解决方案5】:

          当所有其他合理的方法都无法解决问题时,在违规行下方的新行上重新键入违规调用。

          您可能会发现编译器对新行很满意。删除旧行。 (让你去 HMMM 的事情?)

          我发现这种情况不止一次发生在 xcode(和其他编辑器)中。当所有其他方法都失败时,再次键入该行。

          【讨论】:

          • 这很有趣,但我不确定这是对问题的回答。
          • 重新阅读线程我可以看到我的回答实际上并没有解决这个问题。但是,它确实解决了有时与原始“为什么编译器抱怨某些 .m 而不是其他的类别方法,即使我已经包含了类别 .h,确保调用被写入正确,甚至重新启动了xcode?”然后是时候尝试在另一行重新输入呼叫了。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-04
          • 2017-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多