0

連絡先の UITableView を表示するアプリを構築しているとしましょう。ユーザーの連絡先はリモート サーバーに保存されます。サーバーからユーザーの連絡先を取得し、Core Data に保存します。

UITableViewController が読み込まれ、Core Data から NSManagedObject サブクラス (ContactVO という名前) の配列がフェッチされます。この ContactVO の配列を使用して、UITableView を設定します。次に、サーバーにリクエストを送信して、ユーザーの最新の連絡先リストを取得します。サーバーから応答を受け取ったら、Core Data ストアからすべての連絡先を削除し、サーバー データから作成した連絡先を挿入します。この時点で、データが変更されたことを UITableViewController に通知し、デリゲート メソッドを介して新しい連絡先を渡します。

問題: Core Data から連絡先を削除するとすぐに、UITableViewController に保存されている ContactVO への参照がゴミになります。

ここでのアイデアは、テーブル ビューで常にユーザーの操作を許可しながら、利用可能な最新の連絡先を常に表示することです。

私が試したこと:

  • ContactVO とすべて同じプロパティを持つクラス (Contact) を作成し、このクラスのインスタンスに Core Data から取得したデータを入力してから、Contact オブジェクトの配列を UITableViewController に返します。

  • フェッチされた ContactVO ごとに NSDictionary を作成し、辞書の配列を UITableViewController に返します

これらの両方よりも良い方法が必要です。フェッチ リクエストの結果を格納するための推奨される方法は何ですか?

4

1 に答える 1

2

NSFetchedResultsControllerとそのdelegateについて読む必要があります。モデルが変更された (オブジェクトの削除、追加、変更) ときに、テーブルに表示されるデータを更新するのに役立ちます。Xcode にもサンプル プロジェクトがあります。Core Recipes という名前だと思います。

お役に立てれば!

于 2012-12-17T23:50:38.773 に答える