gpt4 book ai didi

ios - 合并托管对象上下文的方法

转载 作者:行者123 更新时间:2023-11-29 13:09:12 25 4
gpt4 key购买 nike

我在 Core Data 中使用并发。 Apple 文档如 this经常告诉我,上下文的同步取决于我的应用程序的语义。而且我找不到如何合并 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];
}
}
}
}
}

但是这个方法创建了重复的对象。

最佳答案

理论上,您应该只选择您喜欢的合并策略并将其设置在NSManagedObjectContextslike the doc says .

您将能够决定是否保留本地更改、存储一次等等:

enum {
NSErrorMergePolicyType = 0x00,
NSMergeByPropertyStoreTrumpMergePolicyType = 0x01,
NSMergeByPropertyObjectTrumpMergePolicyType = 0x02,
NSOverwriteMergePolicyType = 0x03,
NSRollbackMergePolicyType = 0x04
};

但我猜你已经知道这些事情了。一旦我写了一个类别来更容易地处理这些情况,你可以找到 implementation code here .我自己在网络空间的某个地方找到了它的一部分,但我现在找不到了,因此我不能引用其他作者。

但是 我的建议始终是:避免手动处理。这真是令人头疼。我发现使用 MagicalRecord 真的很舒服对于 CoreData 管理,它就像一个魅力。

关于ios - 合并托管对象上下文的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17802494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com