2

我经常发现,当从 myObject2 调用与 myObject1 关联的 myMethod 时,我收到“myObject1 可能无法响应 -myMethod”的警告,但随后程序运行得很好。为什么编译器在编译时不能识别声明的方法?

约翰·多纳

4

5 回答 5

2

这显示为警告,因为 Objective-C 是一种非常动态的语言。在编译时,编译器在尝试编译文件时没有找到“myMethod”的声明(可能您缺少头文件,或者忘记将其包含在头文件中?)。然而,它只产生了一个警告,因为 Objective-C 有能力在运行时创建和加载额外的方法,这样当代码执行时,该方法就会存在。因此,这只是一个警告。

很可能您只是没有在适当的头文件中声明该方法。

于 2009-12-12T04:39:33.667 回答
1

警告意味着您正在调用编译器尚未看到方法声明的方法。在大多数其他语言中,这是一个错误,这当然是一个你不能忽视的警告。

如果您尚未声明该方法,请在源文件顶部的 @interface 块中(如果它是私有方法)或类的头文件(如果它是公共方法)中声明。

如果您在头文件中声明了方法,请务必导入头文件。

如果您已经声明了该方法并且您正在导入正确的头文件,那么您在某处有错字。

于 2009-12-12T05:56:54.327 回答
0

或者有时,如果您使用的是委托类,则需要使用这些委托方法定义一个类别,以便编译器找到它们。

于 2009-12-12T05:41:36.717 回答
0

这种情况经常发生的一种情况是,如果包含对象的变量的类型是超类的类型,并且该方法只为子类定义。您可以通过将其键入为id或使静态类型更具体来避免这种情况。如果变量类型是类本身的类型,则该方法很可能在您尝试调用它的范围内对编译器不可见 - 其他答案处理这种情况。

于 2009-12-13T05:54:34.937 回答
-2

通常,添加

@class myObject1

将解决问题。在 Stack Overflow 上查看 Ben Gottlieb 对Objective-C @class 与 #import的回答。

于 2009-12-12T09:02:16.250 回答