8

マルチスレッドアプリでは、メインスレッドと1つ以上のバックグラウンドスレッドが、コアデータストアの情報に同時にアクセス、フェッチ、変更する場合があります。スレッドごとに、新しいを作成していNSManagedObjectContextます。ただし、の各インスタンスはNSManagedObjectContext同じ `NSPersistentStoreCoordinator'インスタンス(シングルトンの他の場所に格納されている)を使用します。

私の質問は、の各インスタンスのマージポリシーに関するものですNSManagedObjectContext。バックグラウンドスレッド()に1つのマージポリシーを設定し、メインスレッドにNSMergeByPropertyStoreTrumpMergePolicy別のポリシー( )を設定した場合、本質的な利点はありますか?NSMergeByPropertyObjectTrumpMergePolicy

私のNSMangagedObjectContextゲッターには、次の条件があります。

    if ( [NSThread isMainThread] ) {

        [_context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];

    } else {

        [_context setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
    }

ありがとうございました。

編集:それは必要ですか?両方のタイプのスレッドについて、デフォルトで一方のポリシーを他方よりも優先する必要がありますか?

4

2 に答える 2

3

私はこの解決策を採用することになりましたが(1年以上前)、最近この質問に対する回答が得られなかったため、自分で解決することにしました。

NSManagedObjectContext *context;

if ( [NSThread isMainThread] ) {

    context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    [context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];

} else {

    context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [context setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];

}
于 2014-05-20T18:26:41.103 に答える
0

異なるコンテキストから保存を行う場合は必要だと思います。https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdChangeManagement.html#//apple_ref/doc/uid/TP30001201を参照してください

于 2014-05-20T09:11:45.950 に答える