簡體   English   中英

合並托管對象上下文的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM