tldr,一个简单的问题是:在OS X 10.10中,我无法调用委托类中定义的方法。
以下信息如下:
我有一个示例Cocoa项目,它有一个委托类,其方法定义如下:
@interface SPVAppDelegate : NSObject <NSApplicationDelegate>
- (void)doSomething;
end
如果我使用10.9 SDK编译项目,我可以在程序的其他部分调用此方法doSomething,如下所示:
[[NSApp delegate] doSomething];
但是,使用10.10 SDK,编译项目时会出现此错误:
No known instance method for selector 'doSomething'
如果我使用10.10 SDK,为什么找不到此方法?这里的API有什么变化吗?
答案 0 :(得分:2)
好的,我想我找到了一个解决方案,我必须将[NSApp委托]的类型显式转换为委托类才能调用该方法,即:
[(SPVAppDelegate *)[NSApp delegate] doSomething];
在10.10中,委托定义为:
@property (assign) id<NSApplicationDelegate> delegate;
在10.9中,它就像:
- (id <NSApplicationDelegate>)delegate;
因此委托在10.10中成为一个真实的属性,但返回类型仍然是id。我仍然不确定为什么这种改变会导致这个问题。