2012-04-16 15 views
1

最初にセグエスを信用しませんでした。なぜなら、正しく設定されていないとクラッシュしていて、フードの下で何が起こっているのか分からないからです。私はまだ何が起こっているのかを正確に「取得」していません。segues:Sequeを呼び出すコントローラーインスタンスはどうなりますか?

私は、ViewController AとViewController Bの間に、UINavigationControllerが関与していないセグを持っています。それは私が好きなFlipHorizo​​ntalトランジションを行います。

Aがセグを開始すると、Aインスタンスはどうなりますか? AのviewDidUnloadメソッドにログステートメントを入れても呼び出されません。だから、まだまだ潜んでいますか?私はAの同じインスタンスに戻ることができるようにしたいと思います。それはすべてのVarsがそのままですが、私はそれを行う方法を理解することができませんでした。

テストとして、Nav ControllerにAを埋め込み、Bとのセグとプッシュの両方を試みましたが、Aのインスタンスに戻ることができませんでした。

答えて

0

ビューとコントローラの違いを覚えておいてください。呼び出し側のコントローラはまだ周囲にあり、それも見えます。ただし、画面に表示されていないVIEWは、システムによってアンロードできます。これでviewDidUnloadが呼び出されます。

コントローラは、基本的に、他のすべてのオブジェクトと同様に、コントローラへのすべての参照がなくなるまで存続します。さらに、コントローラが所有するものは、まだ生きています。しかし、それがまだ生きている間、それは "あなたが必要でない、または再構築できるものを取り除く"という2つの重要なメッセージを得ることができます。

これらのうちの1つは、viewDidUnloadです。もう一つはdidReceiveMemoryWarningです。

スタックコントローラーが100台のNavController内にある場合は、ビューコントローラーが100台ありますが、ビューの一部が表示されない場合があります。

+0

返信いただきありがとうございます。呼び出し元のコントローラ(A)を宛先コントローラ(B)に渡すための有効な設計パターンはありますか?Bによって開始されたセグメントから戻るときに呼び出しコントローラ(A)を宛先コントローラとして設定できますか?おそらく私は尋ねると思っていませんでした –

+0

申し訳ありませんが、私はどこかでその質問に迷ってしまいました。私があなたが記述していると思うのは、委任または通知によって処理されます。 AがBを呼び出す前に、彼はb.delegate = selfのようなことを行い、Bが終了すると、彼は彼がしたことをその代理人に通知するだけです。 Aのデリゲートハンドラはコントローラを終了します。ナビゲーションコントローラを使用すると、プッシュ/ポッピングが自動的に処理されます。 –

+0

ありがとう - 私はそれを整理したと思う –

関連する問題