2009-06-15 4 views
7

私は、外部MySQLサーバーにデータを保持するアプリケーションで作業していますが、コアデータを使用して応答時間を改善するためにローカルにキャッシュします。基本的に、私は何をしたいのはこれです:新しいフェッチなしでNSFe​​tchedResultsControllerの結果を更新する

  1. (NSFetchedResultsControllerを使用してSQLiteのデータストア、)コアデータからデータを取得し、バックグラウンドでそれをMySQLサーバから
  2. グラブ新しい項目を表示
  3. 新しいデータセット(新規アイテムと古いアイテムの両方)を使用して現在のテーブルビューを更新する

私はこのすべてを最後のステップを除いて実行しています。 NSFetchedResultsControllerをどのようにしてデータセットを更新するかを私は考えていません。これまでのところ、私は直接そのNSManagedObjectContextに項目を追加しようとしました:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" 
           inManagedObjectContext:[fetchedResultsController 
                 managedObjectContext]];

は、私はまた、AppleがそのCoreDataBooks例に何をするか試みたが、別の「追加」管理対象オブジェクトコンテキストとmergeChangesFromContextDidSaveNotification:への呼び出しを使用しました。どちらも、現在取得されている結果コントローラのマネージオブジェクトコンテキストにあるNSManagedObject *のセットを変更していないようです。

NSFetchedResultsControllerが現在管理しているオブジェクトのセットを更新するにはどうすればよいですか?

答えて

4

私の問題は、オブジェクトが更新されていないのではなく、私が持っていたNSFetchedResultsControllerインスタンスがセクションインデックスのタイトルを正しく更新していないことがわかったため、私のUITableViewで結果を見ることができませんでした。

フェッチ結果コントローラからの管理オブジェクトコンテキストの更新はコントローラの結果オブジェクトセットを更新しますか。

7

あなたの問題を抱えていて、明らかに通知を使用しているのは、テーブルがnsfetchedresultsコントローラを使用しているときにテーブルビューを更新できるユニークな方法です。

コアデータブックのサンプルのように:
STEP1:通知のNSNotificationCenterにオブザーバを追加NSManagedObjectContextDidSaveNotification
STEP2:(あなたのセレクタに通知トリガーを)あなたのコンテキストを保存
STEP3: MergeChangesFromContextDidSaveNotificationメソッドを使用してコンテキストの変更をマージします。
step4:通知センターからオブザーバーを削除します。

個人的に私は通知certerをバイパスし、唯一くそ、自分自身をリフレッシュコンテキストをお伝えしたいと思います:)

+0

これは実際に私が使用した方法であり、私はこれはAppleが自分のいくつかでそれをしない方法だと思いますコアデータの例。 – Tim

関連する問題