[英]Ways to merge managed object contexts
我在Core Data中使用並發。 像這樣的 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];
}
}
}
}
}
但是此方法創建重復對象。
從理論上講,您應該選擇喜歡的合並策略並將其設置在NSManagedObjectContexts中 , 就像文檔所說的那樣 。
您將能夠決定是否保留本地更改,一次存儲等等:
enum {
NSErrorMergePolicyType = 0x00,
NSMergeByPropertyStoreTrumpMergePolicyType = 0x01,
NSMergeByPropertyObjectTrumpMergePolicyType = 0x02,
NSOverwriteMergePolicyType = 0x03,
NSRollbackMergePolicyType = 0x04
};
但是我想你已經知道了這件事。 一旦我編寫了一個類別以更輕松地處理這些情況,即可在此處找到實現代碼 。 我本人在網絡空間中的某個地方找到了它的一部分,但是我現在找不到了,因此無法引用其他作者。
但是我的隔離始終是:避免手動處理。 這是一個真正的痛苦。 我發現使用MagicalRecord進行CoreData管理真的很舒服,它的工作原理像一個迷笛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.