2011-07-26 8 views
3

私は動物を記述したNSManagedObjectを持っています。それは "name"、 "species"、 "scientificName"などの属性を持ちます。私はすべての動物をUITableViewに表示し、NSManagedObjectsをNSFetchedResultsControllerで管理しました。コアデータを持つビューでモデルオブジェクトを参照するベストプラクティスは何ですか?

私のテーブルビューのセルにコンテンツをレンダリングするために必要な情報を提供するために、私は弱くその動物を記述するNSManagedObjectを参照しました。ただし、NSManagedObjectにフォールトが発生し、テーブルビューのセルが再描画されると、オブジェクトのプロパティにアクセスしてフォールトを回避することがあります。

データソースとしてコアデータを使用するときに、ビューオブジェクトに情報を提供するためのベストプラクティスは何ですか?可能であれば、NSManagedObjectのすべての属性をテーブルビューのセルにコピーしないようにしたいと思います。

+0

バインディングを使用していますか? –

+0

私はNSManagedObject上でKVOでNSFe​​tchedResultsControllerを使用しますが、バインディングはありません(iPhoneタグが示すようにiOS上にあります) – Robin

+0

正直なところ、NSFetchedResultsControllerを使用するのが最善の策です。バッチサイズを制限することはプログラムの効率を上げるのに役立ちますが、私は個人的にはより良い解を考えることができません – justin

答えて

6

モデルレイヤ、ビューレイヤ、コントローラレイヤを明確に分離することをお勧めします。ビューがモデル状態を保持していないことを確認してください。 Modelオブジェクトを保持しているNSManagedObjectを保持します。一部のデータをコピーすることは避けられません。

通常、モデルデータでビューを「ペイント」する方法を実装しています。 UITableViewCellサブクラスでこのような何か:

-(void)configureWithAnimal:(NSManagedObject*)animal { 
    self.nameLabel.text = [animal valueForKey:@"name"]; 
    self.speciesLabel.text = [animal valueForKey:@"species"]; 
    // Etc. 
} 

それは独立して、新しく作成されたか、再利用した細胞の、セットアップにUITableViewControllerサブクラスにおける単一のコード行のセルであるこの方法です。また、多くのテーブルがカスタムセルを再利用したい場合は、セルを表示するためにコードを再実装する必要はありません。

+0

UITableViewCellsはモデルオブジェクトと密接に結びついているので、これは容認できる方法だと思います。純粋主義者は、このコードをコントローラに移すことができます(モデルとビューの間の唯一の「合法的」メディエータとして)。 – DrMickeyLauer

関連する問題