我正在开发一个 Cocoa 应用程序。据我所知,当尝试调用选择器中的方法时,我所做的一切都是正确的。例如(摘要):
标题.h
@interface Foo
@property (nonatomic) BOOL variable;
- (void)bar;
@end
标题.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”)。
我意识到类似的问题已经被问了很多,但是我已经广泛地浏览了这些(以及 cocoa 和选择器的文档),但没有任何帮助。导致此错误的最常见原因似乎是遗漏了 bar
的实现或对 Header.h 的引用,但正如您所看到的,我两者都有。
编辑:选择器是从 NSMenuItem
的实例调用的 - 这就是我调用 representedObject
的原因。
编辑 2:由于某种原因,其他实例方法和属性不会生成警告。只是具体的实例方法。太奇怪了。
最佳答案
哇。我是个白痴。这个问题是因为我没有构建它造成的。由于 OtherHeader.h
位于单独的项目中,因此在编译该项目之前,XCode 自动完成功能无法在库文件中看到它。
因此,根据这个和我之前的互联网研究,我将总结我所知道的导致此错误的原因:
- 缺少包含实例方法的类的头文件
- 缺少实例方法的实现
- 自添加实例方法以来,尚未构建包含带有实例方法的 header 的项目。仅当您发送消息以从单独的项目调用实例方法时,才可能出现这种情况。
我希望这对那些像我一样花了几个小时困惑地盯着这个错误的人有所帮助。
关于objective-c - 如何解决 "Instance method [...] not found"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581909/