2014-10-22 112 views
1

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

回答

2

OK,我想我找到了解决办法,我必须转换[NSApp表示代表]类型明确的委托类,以调用该方法,那就是:

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

在10.10,委托被定义为:

@property (assign) id<NSApplicationDelegate> delegate; 

在10.9,这是这样的:

- (id <NSApplicationDelegate>)delegate; 

所以委托成为一个真正的道具埃蒂在10.10,但返回类型仍然是ID。我仍然不确定为什么这个改变会导致这个问题。

+0

Xcode 6.1在10.9上发生了同样的问题。我通过在构建设置中明确地选择“Base SDK”作为OSX 10.9来解决问题。 – Bigfei 2014-10-30 05:55:01