ゲスト管理アプリケーションの開発でNSFetchedResultsControllerの問題が発生しました。NSFetchedResultsControllerデリゲートとバックグラウンドでの更新の更新
基本的に、アプリケーションはバックグラウンドで(NSOperationサブクラスを使用して)ゲストリストをダウンロードし、管理対象オブジェクトコンテキストに挿入し、UIスレッドのテーブルビューで表示します。
コアデータのマルチスレッドルールに従っていると思います(スレッドで作成された操作のために別のMOCがあります。メインのMOCはdid-save通知などを使用して同期します)。
私が完全に理解していないのは、不正なUI更新を引き起こすメインスレッドではなく、バックグラウンドスレッドでデリゲートメソッド(controllerDidChangeContentなど)を呼び出すと思われるNSFetchedResultsControllerの動作です。
私の質問は - NSFetchedResultsControllerDelegateを使用してMOCの通知を保存するか、メインスレッドで行われた変更のみで動作するように設計されたNSFetchedResultsControllerDelegateを使用することは合法ですか?
私の説明が十分明確であるかどうかわからない場合は、問題を示すコードを投稿することができます。
答えをいただきありがとうございました。私はあなたの解決策に終わった。私を混乱させたのは、Appleのドキュメントに関して、バックグラウンドスレッドからmergeChangesFromContextDidSaveNotificationを呼び出すことは合法です(このメソッドはスレッドセーフであるように設計されています)。だから、私は、Core Data自体が、どういうわけか、NSFetchedResultsControllerの正しいスレッドでの変更の受け渡しを魔法のように管理するだろうと考えました。 – Martin
この点については、ドキュメントが混乱することに同意します。別のスレッドに通知を渡すことはできますが、スレッドセーフであるとは言えません。また、このメソッドを他のスレッドから呼び出すこともできますので、技術的に間違っているわけではありません。ドキュメントページにコメントを書くことをお勧めします:http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html –