合并托管对象上下文的方法
Posted
技术标签:
【中文标题】合并托管对象上下文的方法【英文标题】:Ways to merge managed object contexts 【发布时间】:2013-07-23 06:01:01 【问题描述】:我在 Core Data 中使用并发。像this 这样的Apple 文档经常告诉我,上下文的同步取决于我的应用程序的语义。而且我找不到如何合并UIManagedObjectContext
s 的具体示例。
因此,在我的应用程序中,UIManagedObject
在不同的上下文中可能具有不同的属性值。我需要通过替换对象或更新其属性来合并上下文。
这是我的代码:
- (void)__saveToMainContext
if ([_context_ hasChanges])
NSError *error = nil;
if (![_context_ save:&error])
if (error.code == NSManagedObjectMergeError)
for (NSMergeConflict* conflict in [[error userInfo] objectForKey:@"conflictList"])
[_context_ refreshObject:[conflict sourceObject] mergeChanges:YES];
但是这个方法会创建重复的对象。
【问题讨论】:
【参考方案1】:理论上,您应该只选择您喜欢的合并策略并将其设置在 NSManagedObjectContexts,like the doc says。
您将能够决定是否保留本地更改、存储一次等等:
enum
NSErrorMergePolicyType = 0x00,
NSMergeByPropertyStoreTrumpMergePolicyType = 0x01,
NSMergeByPropertyObjectTrumpMergePolicyType = 0x02,
NSOverwriteMergePolicyType = 0x03,
NSRollbackMergePolicyType = 0x04
;
但我猜你已经知道这些事情了。一旦我编写了一个类别以更轻松地处理这些情况,您就可以找到implementation code here。我自己在网络空间的某个地方找到了它的一部分,但我现在找不到它,因此我无法引用其他作者。但是我的seggestion始终是:避免处理这个手动。真是让人头疼。我发现使用 MagicalRecord 进行 CoreData 管理真的很舒服,它就像一个魅力。
【讨论】:
我看到了这个文档,但我不明白我需要将哪个上下文 mergePolicy 设置为 NSMergeByPropertyObjectTrumpMergePolicyType。如果发生错误怎么办?当我设置了 mergePolicy 时,为什么会出现任何错误? 您设置了哪些政策?如何?你能再贴一些代码吗?并且必须在托管对象上下文中设置合并策略。然后它将决定如何将此上下文数据与持久存储数据合并以上是关于合并托管对象上下文的方法的主要内容,如果未能解决你的问题,请参考以下文章