1

Я использую параллелизм в Core Data. Apple docs вроде 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]; 
       } 
      } 
     } 
    } 
} 

Но этот метод создает дубликаты объектов.

ответ

1

В теории, вы должны просто подобрать политику слияния вы предпочитаете и установить его в NSManagedObjectContexts, like the doc says.

Вы сможете решить, следует ли сохранить локальные изменения, хранение один раз и так далее:

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

Но я думаю, вы уже знаете, это вещи. Как только я написал категорию, чтобы более легко справиться с этими обстоятельствами, вы можете найти implementation code here. Я сам нашел часть его где-то в киберпространстве, но я не могу найти его сейчас, и поэтому я не могу привести другого автора.

BUT Мое заселение всегда: избегайте использования этого вручную. Это настоящая боль в заднице. Мне было очень удобно использовать MagicalRecord для управления CoreData, он работает как charme.

+0

Я видел эти документы, но я не понимаю, какой контекст mergePolicy мне нужно установить в NSMergeByPropertyObjectTrumpMergePolicyType. И что делать, если возникает ошибка? Почему возникает какая-либо ошибка, когда я устанавливаю mergePolicy? –

+0

какая политика вы установили? и как? можете ли вы вставить еще один код? И политика слияния должна быть задана в контексте управляемого объекта. Затем он решает, как эти контекстные данные будут объединены с данными постоянного хранения данных –

Смежные вопросы