9

私が電話するとき:

self.viewController = [[DidItViewController alloc] initWithNibName:@"DidItViewController" bundle:nil];

そして、この行がデバッガーで実行された直後に self.viewController.navController をチェックすると、空 (0x0) であることがわかります。

DidItViewController では、navController を次のように定義しています。

IBOutlet NavigationController *navController; 

私のnibファイルでは、ファイル所有者(DidItViewController)のこのnavControllerプロパティにNavigationControllerをバインドしています。

navController が作成されないのはなぜですか? 何か案は?initWithNibName の仕組みについて何かが欠けているのではないかと思います..

ありがとう。

4

4 に答える 4

21

[NSBundle loadNibNamed:owner:options:]または、代わりにメソッドを使用できます。この方法により、すべてのコンセント接続が確実に接続されます。(そうではあり[UIViewController initWithNibName: bundle:]ません)

サンプルコード

この場合、NIB のファイルの所有者は PhotoShow クラスの外部インスタンスです。

// This works completely. All outlets works.
PhotoShow* obj = [[PhotoShow alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"PhotoShow" owner:obj options:nil];
// Outlets are always available at this moment.

// This works. but does not connects outlets correctly sometimes.
PhooShow* obj = [[PhotoShow alloc] initWithNibName:@"PhotoShow" bundle:[NSBundle mainBundle]];
// Outlets may not available at this moment.

参考文献からの選択

このメソッドを使用して、ユーザー インターフェイスを読み込み、オブジェクトをコードで使用できるようにすることができます。読み込みプロセス中に、このメソッドは各オブジェクトのアーカイブを解除し、初期化し、そのプロパティを構成された値に設定し、他のオブジェクトへの接続を再確立します。(アウトレット接続を確立するために、このメソッドは setValue:forKey: メソッドを使用します。これにより、アウトレット内のオブジェクトが自動的に保持される場合があります。) nib ロード プロセスの詳細については、リソース プログラミング ガイドを参照してください。

于 2010-01-24T08:12:08.923 に答える
8

xib がすべてのコンポーネントをロードするには、少し時間がかかる場合があります。viewDidLoad の後でのみ、navController が初期化されていることを確認できます

于 2009-12-16T03:32:22.803 に答える
1

「navController」プロパティを定義するべきではありません。すべての UIViewController には、「navigationController」および「navigationItem」プロパティが既に自動的に定義されています。ビューがナビゲーション コントローラー スタック上にあると仮定すると、これらはそれぞれナビゲーション コントローラーとナビゲーション項目を指します。

ただし、前に述べたように、「viewDidLoad」関数が呼び出されるまで、「navigationController」プロパティに依存することはできません。「DidItViewController」で「viewDidLoad」メソッドをオーバーライドして、ナビゲーション コントローラーで行う操作を行う必要があります。

編集:
参照: UINavigationController* UIViewController::navigationController()
参照: UINavigationItem* UIViewController::navigationItem()

于 2009-12-16T08:20:38.967 に答える