8

在我的多线程应用程序中,主线程和一个或多个后台线程可以同时访问、获取和更改我的核心数据存储中的信息。对于每个线程,我正在创建一个新的NSManagedObjectContext. 但是,每个实例都NSManagedObjectContext使用相同的 `NSPersistentStoreCoordinator' 实例(存储在单例中的其他位置)。

我的问题是关于NSManagedObjectContext. NSMergeByPropertyStoreTrumpMergePolicy如果我为后台线程( )设置一个合并策略,为主线程设置另一个策略( ),是否有内在的好处NSMergeByPropertyObjectTrumpMergePolicy

在我的NSMangagedObjectContext吸气剂中,我有以下条件:

    if ( [NSThread isMainThread] ) {

        [_context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];

    } else {

        [_context setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
    }

谢谢你。

编辑:有必要吗?对于两种类型的线程,我是否应该只默认使用一种策略而不是另一种策略?

4

2 回答 2

3

我最终选择了这个解决方案(一年多以前),但由于我最近没有收到这个问题的答案,所以我决定提出自己的解决方案。

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 回答