2016-06-14 58 views
24

Xcode 8.0 beta(8S128d)をインストールしました。すべてawakeFromNib方法でスーパークラスのawakeFromNibを呼び出す

Method possibly missing a [super awakeFromNib] call 

:今、私はいくつかのメッセージで警告を持っています。 この場合、このスーパークラスのメソッドを呼び出す必要がありますか?

+0

可能な重複[?私が呼び出す必要があります\ [スーパーawakeFromNib \]](http://stackoverflow.com/questions/3989665/should-i -call-super-awakefromnib) – new2ios

答えて

32

あなたは親に クラス、彼らが必要と 任意の追加の初期化を実行する機会を与えるためにawakeFromNibのスーパー実装を呼び出す必要があります。このメソッドのデフォルトの実装では何もしませんが、多くのUIKitクラスは空ではない実装を提供します。 awakeFromNibメソッド中の任意の時点でスーパー実装を呼び出すことができます。 Xcodeの8の前に

、このための厳密なコンパイラ要件はありませんでした、howeever AppleはXcode8でこれを変更した、と[super awakeFromNib](または迅速でsuper.awakeFromNib())への呼び出しがawakeFromNibに欠落している場合、コンパイラはエラーとして扱います。

のでスウィフトバージョンは次のようになります。

func awakeFromNib() { 
    super.awakeFromNib() 

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

ありがとう!ドキュメンテーションへのリンク –

+0

注文は関係ありませんか?誰かが '[awakeFromNib]'を自分の実装の開始時ではなく終わりにしたいと思う理由は何ですか? – micnguyen

+0

@micnguyenスーパーメソッドの動作をオーバーライドして拡張することに注目する価値があります。これを考慮すると、スーパーは自分のことを最初に実装する機会が必要です。そうしなければ、あなたのサブクラスは既に行われていることを行うことができるからです。私は最終的にスーパーを呼び出すdevsを見てきましたが、これは良い練習ではない、一種のスーパーコールの目的を敗北させるものです。 – PostCodeism

17

コード内で 'awakeFromNib'メソッドを効果的にオーバーライドしています。 NSViewまたはあなたのスーパービューが何であれawakeFromNibも実装しています - あなたのコードを実行する前に、実装の開始時にsuperを呼び出して、NSViewがあらかじめ正しく設定できることを確認する必要があります。 Apple 1として

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    ... your code ... 
} 
関連する問題