5

「メイン」の NSManagedObjectContext に基づいて、UITableView を設定するように NSFetchedResultsController をセットアップしました。

タイマーでは、別の NSManagedObjectContext にオブジェクトを継続的に追加しますが、NSPersistantStoreCoordinator をメイン コンテキストと共有します。

NSManagedObjectContextWillSaveNotification 通知が送信されていることを確認できます。アプリを終了して再起動すると、前回の実行からのすべてのデータが取得されます。ただし、現在の NSFetchedResultsController は更新されません。

テスト プロジェクトを作成し、ここに配置しました。



(最初は、これは複数のスレッドが動作しているために発生していると思っていましたが、すべてが 1 つのスレッドで実行されたときに発生します)。

元の質問

「メイン」の NSManagedObjetContext に基づいて、UITableView を設定するように NSFetchedResultsController をセットアップしました。

バックグラウンド スレッドで、いくつかのオブジェクトを別の NSManagedObjectContext にダウンロードしてインポートしますが、その NSPersistantStoreCoordinator をメイン スレッドのコンテキストと共有します。

NSManagedObjectContextWillSaveNotification 通知を受け取るように登録しています。これらを取得したら、それらをメイン スレッドに転送し、メイン コンテキストに渡します。

デバッガーを使用して、これらが入ってくるのを監視し、それらが実際にコンテキストにオブジェクトを追加していることを確認できます。ただし、NSFetchedResultsController が更新されていません。これをすべてメインスレッドで行うと、うまくいきます。コントローラーで -performFetch: を呼び出すと、コントローラーが更新されるため、新しいオブジェクトが表示されないわけではないことがわかります。

これのほとんどは定型コードであり、異なるスレッドに分割されているだけです。

4

1 に答える 1

11

NSFetchedResultsController からデリゲート コールバックを取得していますか? そうでない場合、これは NSFetchedResultsController 自体のバグである可能性があります。この問題を個別に確認/拒否できるテスト プロジェクトを作成することをお勧めします。

単独で複​​製できる場合。

  1. 私はそれを見てみたいです:)
  2. Apple にレーダーを提出します。

コードを確認した後の答えは、通知オブザーバーを から に変更するNSManagedObjectContextWillSaveNotificationことNSManagedObjectContextDidSaveNotificationです。保存が発生する直前にメッセージを送信していたため、問題が発生していまし

于 2010-01-29T02:37:21.850 に答える