2014-10-22 139 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