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的主要内容,如果未能解决你的问题,请参考以下文章