NSOperationQueueを使用して2つのスレッド間でいくつかのNSManagedObjectデータを渡していますが、NSOperationQueueの同時実行レベルは最大1までです。これを正しく実行しているかどうかについていくつかの提案があります。NSOperationとCoreDataスレッディング
NSManagedObjectはスレッドセーフではないので、NSAperation派生クラスを介してThreadA(メインスレッド)からThreadBにNSManagedObjectIDを送信しています。一般的なワークフロー:
スレッドA(メインスレッド):
- がNSPersistentStoreCoordinator
- メインNSManagedObjectContext(1)
- における使用のためNSManagedObjectContext(2)を作成作成作成
がworkerThread
はMyNSOperationItemを作成し、NSManagedObjectContextに沿って渡し、MyNSOperationItemをNSOperationQueueに追加します。
ThreadB(NSOperationQueueのスレッド):
- NSOperation派生クラスが提供オブジェクトIDを使用して、永続
ストアからデータを取得します。
マイNSOperationクラスは、次のようになります。
@interface MyNSOperationItem: NSOperation
{
// MyNSOperationItem is created in thread1 and MOC will be
// set on creation
NSManagedObjectContext *threadedMOC;
NSManagedObjectID *workItemObjectID;
}
@end
だから、NSManagedObjectContextへの参照を持っている私のNSOperation派生クラスのために大丈夫ですか、私は他の場所で二NSManagedObjectContextを保存する必要がありますか?これはキューなので、MyNSOperationItemの多数のインスタンスが作成され、それぞれが同じNSManagedObjectContextを指しています。
このリンクは、「/ Developer/Examples/CoreData」の「BackgroundFetching」と呼ばれるサンプルアプリケーションを参照していました。そのサンプルを見つけるためのアイデアはありますか? –
あなたが正しい。そして、devサイトでは利用できないようです。取引が何であるかわからないあなたは古い情報を指摘するAppleにドキュメンテーションのバグを報告することができます。たぶん彼らは新しいパスやリンクでそれを更新するでしょう。それからもう一度、彼らはそれを更新し、パス/リンクを完全に削除するでしょう。申し訳ありません。 –