Objective-C 10.10 NSApplication委托不能调用委托类中定义的方法

时间:2014-10-22 09:45:33

标签: objective-c cocoa delegates osx-yosemite

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有什么变化吗?

1 个答案:

答案 0 :(得分:2)

好的,我想我找到了一个解决方案,我必须将[NSApp委托]的类型显式转换为委托类才能调用该方法,即:

[(SPVAppDelegate *)[NSApp delegate] doSomething];

在10.10中,委托定义为:

@property (assign) id<NSApplicationDelegate> delegate;

在10.9中,它就像:

- (id <NSApplicationDelegate>)delegate;

因此委托在10.10中成为一个真实的属性,但返回类型仍然是id。我仍然不确定为什么这种改变会导致这个问题。