以前にこれを実行していなかったアプリで、このメッセージでNSInvalidArgumentException
を示すクラッシュに遭遇しました。
アプリケーションは、アクティブなコントローラーUITabBarController:0x83d7f00をモーダルに提示しようとしました。
UITabBarController
にAppDelegate
を作成し、UIViewControllers
の配列を指定します。
それらの1つは、タップしたときにモーダルで表示したいです。私はデリゲートメソッドを実装することでそれをしました
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
そのView Controllerがモーダルモードで表示したいクラスの場合、NOを返して実行します
[tabBarController presentModalViewController:viewController animated:YES];
そして今、私はそのエラーを受け取っています、それはあなたが他のどこかでアクティブなView Controllerをモーダルに提示できないことを意味しているようです(タブバーで...)私はXCode 4.2 Developer Preview 7を使用しているこれはiOS 5です(NDAについては知っていますが、禁止されている詳細は提供していないと思います)。現在、iOS4 SDKに対するコンパイルがクラッシュするかどうかをテストするXCodeのインストールはありませんが、そうでないことはほぼ確実です。
誰かがこの問題を経験したか、何か提案があるかどうかを尋ねたかっただけです
次のようにインスタンス化された3つのView Controllerがあるとします。
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];
Tab Bar Controllerは、指定したView Controllerにデスグリップを持っているため、これによりエラーが発生します。 Tab BarのView Controllerの配列に追加することも、モーダルで表示することもできません。
Appleは、UI要素を特定の方法で扱うことを期待しています。これはおそらく、「これをやりたくないと思っているので、これをしないでください」としてヒューマンインターフェイスガイドラインに埋もれているでしょう。
私は同じ問題を抱えています。終了した直後にView Controllerを表示しようとしています。
[self dismissModalViewControllerAnimated:YES];
アニメーションなしでそれをやろうとすると完璧に機能するので、問題はコントローラーがまだ生きているということです。 iOS5でdismissViewControllerAnimated:completion:
を使用することが最善の解決策だと思います
私の場合、さまざまなView ControllerからviewControllerを表示しようとして(TabBarViewControllerにviewControllerの参照がある)、上記のメッセージでクラッシュしていました。その場合、提示を避けるために使用できます
viewController.isBeingPresented
!viewController.isBeingPresented {
// Present your ViewController only if its not present to the user currently.
}
誰かを助けるかもしれない。
私は同じ問題を抱えていました。それを解決します。このコードを試すことができます:
[tabBarController setSelectedIndex:1];
[self dismissModalViewControllerAnimated:YES];
削除するだけ
[tabBarController presentModalViewController:viewController animated:YES];
そして保つ
[self dismissModalViewControllerAnimated:YES];