2012-03-07 2 views
2

メインスレッドにはManagedObjectContext、バックグラウンドスレッド用にはNSOperationを使用します。また、各ManagedObjectContextは同じ永続ストアを共有します。コアデータを持つバックグラウンドスレッドでのフェッチ要求の使用

Core Dataを使用してテーブルビューにデータを取り込むため、メインスレッドでフェッチが発生する可能性があります。

バックグラウンドでは、画像の名前を格納するNSManagedObjectプロパティにアクセスする必要があります。次に、バックグラウンドスレッドは、これらのイメージを作成してキャッシュします。これがバックグラウンドスレッドを持つ主な理由です。

両方のスレッドが同時に永続ストアにアクセスしようとすると、両方のスレッドが同じストアドストアにアクセスしようとすると(ロックなど)危険がありますか?

答えて

0

2つの異なるMOCが同じPSCに同時にアクセスして読み取りを行うことができます。

ただし、書き込みの場合、同時書き込みの可能性がある場合は、永続的なストアコーディネータlockunlockが必要です。

+1

確かに?私はリンゴのドキュメントでそれについて何も読んでいません。あなたの出所を教えてもらえますか? –

+0

私は決してそれを文書で見つけたことはありません。経験が豊富で、長いデバッグセッションもありました。 2つの異なるスレッドが常にこの回答の同じNSPSC – amattn

+0

サンプルコードに書き込むようにすれば、簡単に再作成することができます:http://stackoverflow.com/questions/5236860/app-freeze-on-coredata-save/5237031#5237031 – amattn

0

各スレッドが独自のNSManagedObjectContextを使用している限り、NSPersistentStoreCoordinatorを共有することは完全に安全です。 NSManagedObjectContextは、必要に応じて永続ストアを適切にロックすることに対処します。ただし、スレッド間でNSManagedObjectを共有しないように注意する必要があります。

1

各スレッドは独自のマネージオブジェクトコンテキストを必要としますが、すべてのスレッドは単一の永続ストアコーディネータを共有する必要があります。これは記述している潜在的な問題を処理します。 Core Data Concurrency Programming Guideの追加情報を参照してください。

関連する問題