27

[super loadView] を呼び出すべきではないと思っていましたが、何かが混乱しています。

loadView ( UIViewController Class Reference ) の説明では「このメソッドのカスタム実装では super. を呼び出さないでください」と書かれていますが、提供された ZoomingPDFViewer の例では、 loadView 実装 ( ZoomingPDFViewerViewController ) が [super loadView] を呼び出しています。

loadView メソッドから呼び出そうとしましたが、問題なく動作しますが、スーパーを呼び出さないとはどういう意味かわかりません。

4

4 に答える 4

32

あなたは絶対に電話してはいけません[super loadView]。ZoomingPDFViewer の例でバグを見つけたと思います。

ビューコントローラーのビュー階層をプログラムで作成する場合はオーバーライドloadViewします(xibを使用しません)。

ご指摘のとおり、ドキュメントには super を呼び出すべきではないと明確に記載されています。

このメソッドのカスタム実装では、super を呼び出さないでください。

これは、xib からビューをロードするためにベースによって使用されるため、xib からのロードとプログラムによるビューの作成の両方を避けるためだと思います。

ビュー コントローラに nib ファイルが関連付けられている場合、このメソッドは nib ファイルからビューをロードします。

また、オブジェクトの割り当て中にUIViewControllernibNameOrNil パラメーターに nil を渡した場合でも、 のUIViewController実装はloadView関連付けられたクラス名を含む xib をロードしようとすることに注意してください。

nibName プロパティが nil 以外の値を返す場合、View Controller には関連付けられた nib ファイルがあります。これは、View Controller がストーリーボードからインスタンス化された場合、initWithNibName:bundle: メソッドを使用して明示的に nib ファイルを割り当てた場合、または iOS の場合に発生します。ビュー コントローラのクラス名に基づいた名前のアプリ バンドル内の nib ファイルを検索します。ビュー コントローラーに関連付けられた nib ファイルがない場合、このメソッドは代わりにプレーンな UIView オブジェクトを作成します。

このメソッドの本当の目的は、組み込みの xib 読み込みメカニズムに依存することなく、ビュー階層の構築を完全に制御できるようにすることです。

ビューを手動で作成するために、このメソッドをオーバーライドできます。

個人的には、次loadViewの場合にオーバーライドします: 1.) 作成する xib が本当に些細なものであるか、または 2.) コントロールのレイアウトは非常に動的であるため、静的レイアウトで xib を作成してもほとんどメリットがありません。

于 2012-03-05T16:05:10.970 に答える
1

NSViewController は、-loadView の nib からビューを初期化しようとします。nib 名がコントローラーに設定されていないため、self.view = nil; となるだけです。UIViewController も同じように機能すると思います。

安全なはずですが、完全に不要です。

于 2012-03-05T16:09:18.653 に答える
0

IB でビューを作成していない場合は、コードで [super loadView] を呼び出して、プログラムにビューを与える必要があります。

カスタム ビューの場合は、interfaz ビルダーでビューを作成することを想定しているため、それを呼び出す必要はありません。

于 2012-03-05T16:04:31.840 に答える