1. ホーム
  2. objective-c

[解決済み] 「アプリケーションはアクティブなコントローラを表示しようとした」?

2022-10-27 01:01:53

質問

私はちょうど NSInvalidArgumentException を表示するクラッシュを発見しました。

アプリケーションはアクティブなコントローラをモーダルに表示しようとしました UITabBarController: 0x83d7f00.

私は UITabBarController で作成した AppDelegate の配列を渡し UIViewControllers .

そのうちの1つは、タップしたときにモーダルに表示させたいと思います。デリゲートメソッドを実装してそれを実現しました

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

もしそのビューコントローラがモーダルに表示したいものと同じクラスであれば、NOを返して次のようにします。

[tabBarController presentModalViewController:viewController animated:YES];

そして今、私はそのエラーを受け取っています。それは、他のどこか(タブバーで...)でアクティブになっているビューコントローラをモーダルに表示することができないという意味らしいのです。 私はXCode 4.2 Developer Preview 7にいるので、これはiOS 5だと言っておきます(NDAについて知っていますが、私は禁じられた詳細を与えていないと思っています)。私は現在、iOS4 SDK に対してコンパイルしてクラッシュするかどうかをテストするための XCode インストールを持っていませんが、そうでないことはほぼ間違いありません。

どなたかこの問題を経験されたことがあるか、または何か提案があるかどうかをお聞きしたかっただけです。

どのように解決するのですか?

このように3つのビューコントローラがインスタンス化されていると仮定します。

UIViewController* vc1 = [[UIViewController alloc] init];
UIViewController* vc2 = [[UIViewController alloc] init];
UIViewController* vc3 = [[UIViewController alloc] init];

このようにタブバーに追加していますね。

UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]];

今、あなたはこんなことをしようとしています。

[tabBarController presentModalViewController:vc3];

これは、タブバーコントローラが、あなたが与えたビューコントローラを死守しているため、エラーが発生します。 タブバーのビューコントローラの配列に追加しないか、モーダルに表示しないかのどちらかです。

Apple は、UI 要素を特定の方法で処理することを期待しています。 これはおそらく、ヒューマン インターフェイス ガイドラインのどこかに、「私たちはあなたがこれをしたいと思うことを期待していないので、これをしないでください」という形で埋め込まれています。