2012-01-15 35 views
0

我收到以下警告:如何解決Xcode中的錯誤警告?

Instance method 'method name' not found (return type defaults to 'id') 

當該代碼被調用:

@protocol SomeProtocol <NSObject> { 
    @property (nonatomic, retain) SpecificClassName* someDelegate; 
} 
... 
+ (void) aMethod : (id <SomeProtocol>) object { 
    [object.someDelegate doSomeThing]; // warning statement show up here 
} 

我覺得這是編譯器在這一點很短的到來,但只是可能鍋叫黑色水壺...有沒有人有任何反饋呢?

+0

也許你需要'#import'頭文件SpecificClassName? – joerick 2012-01-15 18:19:24

+0

你是否實現了方法:'someDelegate'和'setSomeDelegate'在你的類中符合'SomeProtocol'? – jamapag 2012-01-15 18:21:11

+0

@joerick - 非常感謝!你能否將它作爲實際答案,以便我可以將其標記爲已接受? ...添加導入語句做了訣竅,我沒有積極使用需要導入SpecificClassName的變量,但我確實通過屬性getter(object.someDelegate)獲取了它,並且由於「導入了SpecificClassName 「對我來說變得不明顯,但根據編譯器的警告是必要的。 – pulkitsinghal 2012-01-20 19:10:43

回答

1

您需要#importSpecificClassName的頭文件,在您的實現中(.m文件)。

如果您打算在頭文件中使用類型名稱SpecificClassName,則可以使用前向聲明@class SpecificClassName,但在該類上調用方法需要編譯器知道該方法的返回類型。

如果您想調用SpecificClassName實例的方法,請包括其定義的標頭。

0

我意味着類的頭文件不包含方法簽名。所以編譯器無法判斷該方法是否真的存在。修復頭文件以擺脫警告。

在Java或C++中,這將是編譯失敗。那是因爲他們在編譯時做了方法綁定,所以編譯器需要找到的方法。 Objective-C在運行時執行;它將方法調用發送給對象,並且該對象可能有也可能沒有這樣的方法。

+0

我正在使用一個協議,並且包含方法簽名,所以實現類不需要再次包含它的頭文件。 – pulkitsinghal 2012-01-20 19:12:23