我在Core Data中使用并发。像this这样的Apple文档经常告诉我,上下文的同步取决于我的应用程序的语义。我找不到具体的样本如何合并UIManagedObjectContext
。
因此,在我的应用中,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];
}
}
}
}
}
但是这个方法会创建重复的对象。
答案 0 :(得分:1)
理论上,您应该选择您喜欢的合并策略,并将其设置在 NSManagedObjectContexts ,like the doc says中。
您将能够决定是否保留本地更改,存储一次等等:
enum {
NSErrorMergePolicyType = 0x00,
NSMergeByPropertyStoreTrumpMergePolicyType = 0x01,
NSMergeByPropertyObjectTrumpMergePolicyType = 0x02,
NSOverwriteMergePolicyType = 0x03,
NSRollbackMergePolicyType = 0x04
};
但我猜你已经知道了这件事。一旦我写了一个类别来更轻松地处理这些情况,你就可以找到implementation code here。我自己在网络空间的某处发现了它的一部分,但我现在找不到它,因此我不能引用另一位作者。
但是我的句子总是:避免手动处理。屁股真的很痛苦。我发现使用MagicalRecord进行CoreData管理非常方便,它就像魅力一样。