0

私はこれを何時間も戦ってきました。私はどこでも検索してきただけで、私の問題の解決策を見つけることができないようです。私はここでいくつかの重要なコンセプトが欠けていると確信しています。modalViewControllerを表示する際に問題が発生する

私AppDelegate(didFinishLaunching)は、基本的に私の窓を設定し、RootViewControllerを呼び出します:

 
// create our window 
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
[window setBackgroundColor:[UIColor blackColor]]; 

// create our rootviewcontroller 
RootViewController *controller = [[RootViewController alloc] init]; 

// add our rootviewcontroller's view to our window 
[window addSubview:controller.view]; 

// controller is now owned by window's view 
[controller release]; 

// show us to the world 
[window makeKeyAndVisible]; 

私は、ウィンドウのサブビューとしてcontroller.viewを追加すると、私の理解がRootVCのloadViewメソッドが自動的に呼び出されますということです。 RootVC loadViewメソッドで

、私はtabBarController、navigationControllerとそれ自身のViewControllerを持つそれぞれのタブを作成します。すべて正常に動作しています。 RootVCのviewDidLoadで

は、私は、これは、ユーザがこのアプリを実行している最初の時間であるかどうかをチェックしています、そしてもしそうなら、私は、モーダルウェルカム画面を投げるしたいです。これは私が問題を抱えている部分です。

私はRootVCのviewDidLoadメソッドのうち、できるだけ多くのコードを維持したいのですが、理想的にはこれで私が欲しいものを達成することができるだろう:

 
WelcomeViewController *welcome = [[WelcomeViewController alloc] init]; 
[self presentModalViewController:welcome animated:true]; 
[welcome release]; 

明らかにこれは動作しません。私は明示的にビューのプロパティを設定していないので、WelcomeVCのloadViewはまだ実行されていません。私はさまざまなソリューション(welcome.view - [[UIView ....]、self.viewを設定するためのWelcomeVCのinitメソッドを使用して)の束で遊んだが、私はちょうどそのモーダルをポップアップさせることはできないようだ。

どのように私は私が探しているものを達成する必要がありますか?ベストプラクティスとは何ですか?また、自分のコードをきちんと整理しておくのに最適な解決策は何ですか?

私がこだわっているので、うまくいけば、あなたのソリューションは、私は私のアプリの開発を継続することができます!

+0

があなたの質問に関連していない、私は考えていない[ウィンドウのaddSubview:controller.view]ビューコントローラを保持します。 – MHC

+0

@MHC - 詳しいことはできますか?なぜそう思うの?私はビューがサブビューを追加するたびに、そのサブビューが保持されると思った。 – djibouti33

+0

サブビューは保持されますが、ビューコントローラは保持されません。 – MHC

答えて

1

問題はそれほど単純ではありませんが、解決策があります。メインビューが表示されるまで待つ必要があります。そのため、条件を確認して、メソッドでモーダルビューを表示し、viewDidLoadメソッドでは表示しないでください。

+0

私のコードには他にも問題がありましたが、あなたの解決策は私が修正する必要があったことでした。ちょうど読み込むのではなく、メインビューが表示されるのを待たなければならない理由は何ですか?これは文書のどこにでも記載されていますか? – djibouti33

+0

アップルのドキュメントで「現在のビューコントローラ」で 'presentModal ...'メソッドを使用していると言っているようなものです。しかし、私が知る限り、「現在のビューコントローラ」はどこにも定義されていません。しかし、その動作(モーダル提示されたビューはプレゼンテーションビューの一番上にある)を考えると、プレゼンテーションビューはおそらく、それ自身のビューのスーパービューで動作します。したがって、他のView Controllerをモーダルに提示する前に、ビュー自体をビュー階層に適切に挿入する必要があります。 – MHC