2012-01-30 14 views
0

データをテーブルビューに読み込むサービスがあります。サービスは、私は私のモデルにデータをロードデータをロードしたとき:テーブルビューには、それがどのデータのアップデートする必要があることを知っているように、これら2つのコールが「対応結合」している場合データが配列にロードされた後、テーブルがエントリを更新しない

[self.model.entries removeAllObjects]; 
[self.model.entries addObjectsFromArray:objects]; 

は今、私は疑問に思って直接self.model.entriesにバインドされています。私はこれを頼んでいます。なぜなら、サービスが完了した後に、テーブルがテーブルビューセルの数について再度私の代理人に尋ねないからです。バインディングが入り込まないようです。

テーブルビューでreloadDataと呼ぶことができます。もはや "拘束力のある哲学"には適合しません。

私のモデルクラスは新しいNSMutableArrayが存在しなければそれを返します。これがバインディングを使用する正しい方法であるかどうかは私には分かりません。

答えて

1

完全なバインディングの互換性のためには、NSController ...この場合はおそらくNSArrayControllerを介してバインドする必要があります。

モデルに直接バインドすると、MVCパターンが破られています。いいえ、NSTableViewがモデルに直接バインドされているときにNSTableViewが変更を受け取るとは思われません。

例えば、NSArrayControllerはのarrangedObjectsにあなたのテーブルビューをバインドし、そのようにNSArrayControllerは方法、使用

:コンテンツを管理するために

-add: 
-removeObjects: 
-insert: 

を。テーブルビューに自動的に反映されます。

+0

なぜこれがMVCパターンを破るのか簡単に説明できますか? – Besi

+1

MVCの "C"部分を省略しているので、やや軽快です。 ;-)考え方は、モデルがUIについて何も知っていてはならないということです。逆もまた同様です。たとえば、配列によるデータのバックアップから辞書、データベース、またはWebサービスへのバックアップに切り替える場合、UIは変更しないでください。コントローラ内のグルーのみが変更されるべきです。フレームワークはあなたをより良いアーキテクチャに変えようとしているため、コントローラをバインドする必要があります。 –

関連する問題