2012-02-09 8 views
1

コアデータとマルチスレッドの問題がしばらくありました。いくつかのブログとApple Docsを読んだ後、推奨される方法は各スレッドに対してNSManagedObjectContext(moc)を作成し、共有することはNSPersistentStoreCoordinatorです。しかし、私はNSOperationsを使用していて、特定のスレッドには接続されていないので、各操作のために新しいmocを作成する必要があります。コアデータとマルチスレッドからデータを取り出すときの効率

私はmocを作成するたびに、私はストアコーディネーターをモックに設定し、それを使っていくつかのデータを取得します。次に、別のスレッドでフェッチしたオブジェクトを使用する必要がある場合は、たとえばフォアグラウンドで、再度取得し、新しいMocを作成し、existingObjectWithID:error:を使用するとします。

しかし、私が知っている限り、オブジェクトIDの配列を受け取るメソッドはないので、各オブジェクトにその呼び出し(existingObjectWithID:error:)を使用する必要があります。つまり、しばらくループしている可能性があります。回。

私の質問はこれは正しい方法ですか?何か不足していますか?メインスレッドから直接データを取得するよりも速いのですか?

私が見つけたほとんどの情報は、異なるスレッドでデータを変更することでしたが、フェッチについてはほとんど何も見つかりませんでした。事前に

感謝:)

+0

対象とするiOSのバージョンは? –

+0

iOS 4とiOS 5の両方(異なるプロジェクト) – vicpenap

+0

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/Concurrency.html –

答えて

1

NSManagedObjectContextオブジェクトはスレッドセーフではありません。つまり、複数のスレッドからコアデータにアクセスする場合は、スレッドごとに1つずつ(スレッド上にも作成する必要があります)必要になります。これらはそれぞれ、同じNSPersistentStoreCoordinatorを使用して永続ストアへのアクセスをシリアル化します。

関連する問題