7

navigationControllerからアクセスしようとしていますがUIViewController、何らかの理由で等しいnil

AppDelegate:

self.mainViewController = [[MainViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.mainViewController];
self.window.rootViewController = self.navigationController;

MainViewController:

 MyViewController *myViewController = [[MyViewController alloc] init];
[self.navigationController presentModalViewController:myViewController animated:YES];

誰でもこの問題に遭遇しましたか?

ありがとう!

4

3 に答える 3

2

あなたは正しいコードの多くを実行していますが、すべてが正しい場所にあるわけではありません。UINavControllerをViewControllerで初期化する必要があるのは正しいです。ただし、送信したコードでは、navコントローラーが初期化される前にMainViewControllerのinitメソッドが完了しています。

これは、MainViewControllerに自分自身を表示するタイミングを決定させるべきではないという事実によるものです。初期化して、それ自体の外部の何か(この場合はAppDelegate)によって提示する必要があります。

AppDelegate:

MainViewController *mvc = [[MainViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
self.window.rootViewController = self.navigationController;

その後、MainViewControllerで何かをモーダルに表示する必要がある場合は、initメソッドではなく、viewWillAppear:またはviewDidLoad:で実行する必要があります。showMyModalまたは、アプリデリゲートが呼び出すことができるパブリックメソッドをMainViewController()に作成します。

于 2012-11-18T18:00:43.853 に答える
1

UINavigationController を作成し、ViewController をそのルートに割り当てます。

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: myViewController];
[self presentViewController:navController animated:YES completion:nil];
于 2013-08-21T16:48:05.883 に答える
0

UIViewController には UINavigationController がない場合があります。
明示的に設定した場合にのみ、ナビゲーション コントローラーはいくつかのコントローラーを所有します。

[yourNavController setViewControllers: @[ yourViewController1, ... , yourViewControllerN] ];
于 2012-11-17T20:03:35.220 に答える