Objective-C 10.10 NSApplication委托不能调用委托类中定义的方法
问题描述:
tldr,简单的问题是:在OS X 10.10中我无法调用在委托类中定义的方法。Objective-C 10.10 NSApplication委托不能调用委托类中定义的方法
一些信息如下:
我有一个样品可可项目,其中有一个委托类,并确定了其方法如下:
@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有什么改变吗?
答
OK,我想我找到了解决办法,我必须转换[NSApp表示代表]类型明确的委托类,以调用该方法,那就是:
[(SPVAppDelegate *)[NSApp delegate] doSomething];
在10.10,委托被定义为:
@property (assign) id<NSApplicationDelegate> delegate;
在10.9,这是这样的:
- (id <NSApplicationDelegate>)delegate;
所以委托成为一个真正的道具埃蒂在10.10,但返回类型仍然是ID。我仍然不确定为什么这个改变会导致这个问题。
Xcode 6.1在10.9上发生了同样的问题。我通过在构建设置中明确地选择“Base SDK”作为OSX 10.9来解决问题。 – Bigfei 2014-10-30 05:55:01