我如何解决"未找到实例方法[...]"错误?

时间:2014-07-05 00:22:25

标签: objective-c macos cocoa selector

我正在开发一个Cocoa应用程序。据我所知,当我尝试在选择器中调用方法时,我正在做所有事情。例如(抽象):

Header.h

@interface Foo

@property (nonatomic) BOOL variable;

- (void)bar;

@end

Header.m

#import "Header.h"

@implementation Foo

@synthesize variable;

- (void)bar
{
    NSLog("Test");
}

@end

OtherHeader.m

#import "Header.h"

@implementation OtherFoo

- (IBAction)otherBar:(id)sender
{
    Foo *foo = [sender representedObject];
    [foo bar]; // Generates warning
    BOOL variable = [foo variable]; // No warning
}

@end

当我这样做时,表达式[foo bar]会收到警告“实例方法”-bar“未找到(返回类型默认为'id')。

我意识到类似的问题已经在SO上被问了很多,但我已经仔细研究了这些(以及可可和选择器的文档),没有任何帮助。导致此错误的最常见原因似乎是遗漏了bar的实现或 Header.h 的引用,但正如您所看到的,我同时拥有它们。

编辑:从NSMenuItem的实例调用选择器 - 这就是我调用representedObject的原因。

编辑2 :由于某种原因,其他实例方法和属性不会生成警告。只是具体的实例方法。太奇怪了。

1 个答案:

答案 0 :(得分:0)

哇。我是个白痴。这个问题是由于我没有构建它而引起的。由于OtherHeader.h位于一个单独的项目中,因此在编译该项目之前,XCode auto complete无法在库文件中看到它。

因此,从此以及我之前的互联网研究中,我将总结我所知道的错误原因:

  1. 缺少包含实例方法的类的头文件
  2. 缺少实例方法的实现
  3. 自添加实例方法以来,尚未构建包含带有实例方法的标头的项目。只有在发送消息以从单独的项目调用实例方法时,才会出现这种情况。
  4. 我希望这有助于像我一样花费数小时盯着这个错误的人。