NSMergeByPropertyObjectTrumpMergePolicy 与 NSMergeByPropertyStoreTrumpMergePolicy

Posted

技术标签:

【中文标题】NSMergeByPropertyObjectTrumpMergePolicy 与 NSMergeByPropertyStoreTrumpMergePolicy【英文标题】:NSMergeByPropertyObjectTrumpMergePolicy vs. NSMergeByPropertyStoreTrumpMergePolicy 【发布时间】:2012-10-29 22:06:38 【问题描述】:

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

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

在我的NSMangagedObjectContext getter 中,我有以下条件:

    if ( [NSThread isMainThread] ) 

        [_context setMergePolicy:NSMergeByPropertyObjectTrumpMergePolicy];

     else 

        [_context setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
    

谢谢。

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

【问题讨论】:

【参考方案1】:

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

NSManagedObjectContext *context;

if ( [NSThread isMainThread] ) 

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

 else 

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


【讨论】:

【参考方案2】:

我认为如果您从不同的上下文中进行保存,这是必要的。见https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdChangeManagement.html#//apple_ref/doc/uid/TP30001201

【讨论】:

我还是做了类似的事情 - 看看我的回答

以上是关于NSMergeByPropertyObjectTrumpMergePolicy 与 NSMergeByPropertyStoreTrumpMergePolicy的主要内容,如果未能解决你的问题,请参考以下文章