我正在开发一个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 :由于某种原因,其他实例方法和属性不会生成警告。只是具体的实例方法。太奇怪了。
答案 0 :(得分:0)
哇。我是个白痴。这个问题是由于我没有构建它而引起的。由于OtherHeader.h
位于一个单独的项目中,因此在编译该项目之前,XCode auto complete无法在库文件中看到它。
因此,从此以及我之前的互联网研究中,我将总结我所知道的错误原因:
我希望这有助于像我一样花费数小时盯着这个错误的人。