2011-12-01 11 views
2

私は初めてアプリケーションでUISplitViewControllerを使用しています。マスタービューコントローラはテーブルビューコントローラであり、詳細ビューコントローラは単なるビューコントローラです。UISplitViewController - ビューコントローラ間の通信に最適なデザインパターン

マスターからディテールへの通信については、ディテールをマスターの代理人として設定しました。しかし、マスターが詳細の変更に対応できるようにする必要もあります(対応するテーブルビューのセルの内容は変更を反映するように更新されます)。

マスターはディテールの代理人でも構いませんか?または、この悪いプログラミングの練習ですか?これにはより良いアプローチがありますか?

ありがとうございます。

答えて

1

両方のコントローラで共有されているモデルに固有のデリゲートプロトコルを提供できます。このプロトコルは、itemContentDidChange:withIndex:などのメソッドを持つことができ、リスナーにモデルの変更点に関する情報を提供します。両方のコントローラを共有モデルのデリゲートとして登録する場合(この共有プロトコルを実装する場合)、コントローラ間の依存関係は新しい依存関係を導入することなく削除されます。

しかし、これは私の意見であり、かなり主観的です。あなたのアプローチは完全にうまくいきます。マスターがマスターの代理人であると同時に詳細の代理人になることは絶対にOKだと思います。保持サイクルについて考える必要がないので、各コントローラにもう1つのポインタを渡すよりも優れています。

+0

優秀な回答、ありがとうございます!あなたのアプローチは、実際に私が達成しようとしているものにはるかに適しています。ありがとうございました! –

0

detailViewはmasterViewにリストの 'reloadData'を指定する必要があるため、デリゲートが1つだけ必要なようです。両方が使用しているデータは実際に共有する必要があるため、作成時にはdetailViewにポインタとして渡すことができます。これを行うと、masterView tableViewにreloadDataを通知する前にそれを修正できます。

0

お互いの代理人であることは間違いありません。所有権がないため、循環参照はありません。

関連する問題