2016-06-14 28 views
24

我安裝了Xcode 8.0 beta(8S128d)。現在我有一些警告與消息:調用超類的awakeFromNib

Method possibly missing a [super awakeFromNib] call 

在所有awakeFromNib方法。 在這種情況下,我需要調用這個超類的方法?

+0

的可能的複製[?我應該叫\ [超級awakeFromNib \](http://stackoverflow.com/questions/3989665/should-i -call-super-awakefromnib) – new2ios

回答

32

Apple

你必須調用超級實現awakeFromNib的給父母 類執行任何額外的初始化他們 需要的機會。儘管此方法的默認實現沒有任何功能,但許多UIKit類都提供了非空實現。您可能在您自己的 awakeFromNib方法的任何時候調用超級實現。

的Xcode 8之前,有這個沒有嚴格的編譯器的要求,howeever蘋果已與Xcode8改變這一點,編譯器將其視爲錯誤,如果調用(在SWIFT或super.awakeFromNib()[super awakeFromNib]在awakeFromNib丟失。

如此迅速的版本將是這個樣子:

func awakeFromNib() { 
    super.awakeFromNib() 

    ... your magical code ... 
} 
+0

謝謝!與文檔鏈接的最佳答案! –

+0

這個命令不重要嗎?任何人爲什麼想在最後完成'[super awakeFromNib]'而不是在你自己實現它的開始? – micnguyen

+0

@micnguyen值得注意的是,通過覆蓋超級方法來擴展超級方法的行爲。所以考慮到這一點,super需要一個機會來首先實現它自己的事情,否則你的子類可能會做一些已經完成的事情。我已經看到開發者在最後稱超級,但這不是一個好的做法,有點超出了超級調用的目的。 – PostCodeism

17

你實際上覆蓋了代碼中的'awakeFromNib'方法。 NSView或任何你的superview也實現了awakeFromNib - 在你執行任何代碼之前,你應該在你的實現開始時調用super,以確保NSView能夠事先正確地設置它自己。

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    ... your code ... 
}