我经常发现,当从myObject2调用与myObject1相关联的myMethod时,我收到“myObject1可能无法响应-myMethod”的警告,但是程序运行起来就好了。为什么编译器在编译时不识别声明的方法?
John Doner
答案 0 :(得分:2)
这显示为警告,因为Objective-C是一种非常动态的语言。在编译时,编译器在尝试编译文件时没有找到“myMethod”的声明(可能是你错过了一个头文件,或者忘了将它包含在头文件中?)。但是,它只生成一个警告,因为Objective-C能够在运行时创建和加载额外的方法,以便在代码执行时,该方法将存在。因此,这只是一个警告。
很可能您只是没有在相应的头文件中声明该方法。
答案 1 :(得分:1)
警告意味着您正在调用编译器尚未看到方法声明的方法。在大多数其他语言中这是一个错误,它肯定是一个你不能忽视的警告。
如果您尚未声明方法,请在源文件顶部的@interface块(如果它是私有方法)或类的头文件(如果它是公共方法)中执行此操作。
如果您已在头文件中声明了该方法,请务必导入头文件。
如果您已经声明了该方法并且导入了正确的头文件,那么您的某个地方就会出现错字。
答案 2 :(得分:0)
或者有时,如果您使用委托类,则需要使用这些委托方法定义类别,以便编译器找到它们。
答案 3 :(得分:0)
经常发生这种情况的一种情况是,如果包含该对象的变量的类型是超类的类型,并且该方法仅为子类定义。您可以通过将其键入id
或使静态类型更具体来避免这种情况。如果变量类型是类本身的变量类型,那么在您尝试调用它的范围内编译器可能看不到该方法 - 其他答案处理这种情况。
答案 4 :(得分:-2)