2009-08-05 43 views
2

ビュー内のフィールドを更新するようにビューコントローラを設定するには、ナビゲーションコントローラにプッシュされたフィールドのみを更新し、ナビゲーションコントローラビューからオブジェクトをポップします。ビューを強制的にロード/アンロードする

私の目標は、そのビューコントローラ用:それは、ナビゲーションコントローラのスタックからポップされたときに

  1. 更新表示は、それがナビゲーションコントローラのスタックにプッシュされている場合にのみ
  2. リリースデータ
  3. 再利用(xibファイルのロード/アンロードオーバーヘッドを排除するため)

viewWillBePushed:との委任方法はありますか?

のは、私が望むの三層を持っているとしましょう:

Movies (MovieListController) 
    --> Movie Basic Info (MovieInfoController) 
     --> Movie Credits (MovieCreditsController) 

たちは、各映画を表すクラスMovieを持っていると仮定します。

ここでは、プログラムの実行時にそれぞれ1つずつ、3つのUIViewControllerが必要です。だから私は別の映画のために同じMovieInfoControllerを再利用することができ、同様にMovieCreditsControllerです。

ただし、MovieInfoControllerは、ビューフィールド(タイトル、リリース日など)をスタックにプッシュする場合にのみ更新することもお勧めします。ディスプレイをviewWillAppearに実装すると、MovieCreditsControllerがポップされてもフィールドが強制的に更新されます。

また、Movieへの参照がポップされたとき、および潜在的に大きなオブジェクト(表紙画像など)を公開したいとします。 viewWillDisappearにこのロジックを実装すると、スタック上にMovieCreditsControllerを押しているときにデータが解放されます。

妥当ですか?私は間違った方法でそれについて行くのですか?

答えて

1

ムービーオブジェクトを作成したため、90%はそこにいます。 MovieListControllerは、1つのMovieInfoControllerを所有する必要があります。ナビゲーションコントローラーにプッシュする前に-setMovie:に電話する必要があります。 -setMovie:への呼び出しは、あなたのフィールドを更新するものでなければなりません。

同様に、MovieInfoControllerは1つのMovieCreditsControllerを所有する必要があり、navコントローラにプッシュする前に-setMovie:を呼び出す必要があります。

MovieListControllerおよびMovieInfoControllerでは、-viewDidAppear:[subController setMovie:nil]を呼び出してメモリを解放できます。

+0

これは実際に私が今やっていることですが、 'setMovie:nil'の代わりに' drainFieldsInfo'を呼び出す点が異なります。私はもっ​​と良いものを望んでいた。しかし、ありがとう! – notnoop

関連する問題