私は、特定のモデルに関する情報を知る必要があるドキュメントベースのアプリケーションで、複数のレイヤーの入れ子になったオブジェクトを持っている状況があります。オブジェクトへのインターフェイスの受け渡し、またはCocoaでの委任の使用?
具体的には、NSTextView、NSLayoutManager、およびNSTypesetterがあります。それぞれ、ドキュメントモデルを正しくレンダリングするためには、ドキュメントモデルに関する特定のプロパティを知る必要があります。
現在、私は各クラスをサブクラス化し、それらに私のモデルへの参照を持つプロパティを与えました。参照は、サブクラス化NSLayoutManagerに、私の文書コントローラから渡され、その後、サブクラス化NSTypesetterに渡されます。
@implementation MyLayoutManager : NSLayoutManager {
@private
MyModel *model;
}
@property (retain) MyModel *model;
-(id)initWithModel:(MyModel *)model;
@end
@implementation MyTypesetter : NSATSTypesetter {
@private
MyModel *model;
}
@property (retain) MyModel *model;
-(id)initWithModel:(MyModel *)model;
@end
モデルはController-> MyLayoutManager-> MyTypesetterから渡されます。これはおそらくあまりにも強く結合した少し冗長なようです。
デリゲートパターンの方が良いでしょうか?もしそうなら、それを設定する最良の方法は何ですか? Typesetterにはデリゲートはありませんが、LayoutManagerには既にデリゲートがあります。 Typesetterにデリゲートを追加し、LayoutManagerでデリゲートをオーバーライドする必要がありますか?それとも、私のモデルのインターフェースを譲り渡すだけでいいですか?
洞察力があれば幸いです。ありがとう。
私は、単にビューに必要なデータをコントローラに要求するデリゲートメソッドの設定を終了しました。 – Donald