0

マスターがフェッチされた結果コントローラーを使用してテーブルビューにデータを入力する、単純なマスター詳細シナリオを使用しています。行が選択されると、それぞれの NSManagedObject が詳細ビュー コントローラーに渡され、そこでいくつかの UILabels を設定するために使用されます。一部のフィールドをユーザーが更新できるように、EditorViewController を追加しました。保存時に、EditorViewController を閉じて、詳細ビュー コントローラーに戻ります。保存は、NSManagedObject に割り当てられたコンテキストを使用します。

詳細 VC で UI を更新できるように、問題のオブジェクトが変更されたことを知る最善の方法は何ですか? 現在、Detail VC で UILabels を更新しようとしても、オブジェクトのプロパティの新しい値が表示されません。デリゲート/プロトコルのシナリオが機能する可能性が高いことはわかっていますが、オブジェクトを更新するために探すことができる通知や、詳細画面にフェッチされた結果コントローラーが必要な場合など、使用できるものが既に配置されているかどうかに興味がありますか? ここで取るべき適切なパスがわからない。

4

3 に答える 3

2

NSFetchedResultsControllerは、この問題に対する最も一般的な解決策です。コンテキストの変更をリッスンし、それに応じてテーブル ビューのコンテンツを更新します。あなたの質問はかなり一般的なものなので、適切な使用方法を示す非常に優れた記事へのリンクを残しておきます

于 2013-10-29T14:28:23.943 に答える
0

コードを見ずに何をしようとしているのかを言うのは難しいですが、CoreData を操作するための他の一般的なパターンでは、Model-View-Controller (MVC) パラダイムを利用して、データ ストアからの情報をクラス変数にステージングします。インターフェイスはそのクラス変数から消費します。そのデータを消費するインターフェイスとは別に、CoreData とクラス変数の間でデータを保存、更新、および更新することを心配します。

典型的なワークフローは次のようになります。

//User does something that creates new info
//Store that info permanently in CoreData
//Refresh the class Variable by loading from CoreData (you can also skip this by updating the class variable simultaneously while saving to CoreData, but this is really sloppy and problematic. Better to save then re-fetch)
//Update your interface from the class Variable

または、 Key Value Observing を試すことができますか? しかし、それがあなたの状況に適しているかどうかはわかりません。

于 2013-10-29T14:34:55.700 に答える
0

そのオブジェクトのフェッチリクエストを使用NSFetchedResultsControllerして登録できます(良い解決策だと思います)。または、のような通知をリッスンすることもできますがNSManagedObjectContextDidSaveNotification、お勧めしません。または、オブジェクトを EditorViewController に渡し、そこでプロパティを直接更新することもできます。

于 2013-10-29T14:28:17.207 に答える