Основные данные объединяют два контекста управляемого объекта

Мой какао / приложение имеет контекст управляемого объекта в основном потоке. Когда мне нужно обновить мои данные, моя программа:

  1. Запустит новый поток
  2. Получит новые данные с сервера
  3. Создаст новый контекст управляемого объекта
  4. Отправит уведомление в главный поток для слияния два контекста

Это функция, которая получает уведомление в основном потоке

- (void)loadManagedObjectFromNotification:(NSNotification *)saveNotification
{
    if ([NSThread isMainThread]) {
        [self.managedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
    } else {
        [self performSelectorOnMainThread:@selector(loadManagedObjectFromNotification:) withObject:saveNotification waitUntilDone:YES];     
    }
}

Я не получаю никаких ошибок. Моя проблема - результат слияния, он фактически объединяет управляемые объекты из обоих контекстов.

Моя сущность - это действительно простой список атрибутов и отношений.

Может быть, для слияния потребуются некоторые инструкции, чтобы понять, когда обновленный управляемый объект ЯВЛЯЕТСЯ НЕ новым, а отредактированной версией первого. Я предполагаю, что где-то мне нужно указать способ однозначной идентификации Entity (атрибут, например, может действовать как идентификатор) и что-то вроде политики слияния (если 2 управляемых объекта представляют один и тот же объект, возьмите тот, у которого есть lastModificationDate подробнее недавний).

Мне просто нужно понять, как правильно объединить 2 контекста, чтобы иметь единственную обновленную копию для каждого объекта.

ОБНОВЛЕНИЕ 1

Проблема теперь ясна для меня. Контекст 2 имеет большую разницу: ObjectID. В то время как контекст в основном потоке извлекает ManagedObjects с помощью координатора постоянного хранилища, второй поток создает эти объекты, извлекая удаленный URL-адрес. Даже если объекты имеют одинаковое содержимое, у них будет 2 разных objectID.

У моих объектов уже был уникальный идентификатор, я мог бы использовать setObjectId, чтобы установить это значение. (В документации Apple говорится, что это НЕ очень хорошая идея).

22
задан Giuseppe 8 August 2011 в 08:16
поделиться