Мой какао / приложение имеет контекст управляемого объекта в основном потоке. Когда мне нужно обновить мои данные, моя программа:
Это функция, которая получает уведомление в основном потоке
- (void)loadManagedObjectFromNotification:(NSNotification *)saveNotification
{
if ([NSThread isMainThread]) {
[self.managedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
} else {
[self performSelectorOnMainThread:@selector(loadManagedObjectFromNotification:) withObject:saveNotification waitUntilDone:YES];
}
}
Я не получаю никаких ошибок. Моя проблема - результат слияния, он фактически объединяет управляемые объекты из обоих контекстов.
Моя сущность - это действительно простой список атрибутов и отношений.
Может быть, для слияния потребуются некоторые инструкции, чтобы понять, когда обновленный управляемый объект ЯВЛЯЕТСЯ НЕ новым, а отредактированной версией первого. Я предполагаю, что где-то мне нужно указать способ однозначной идентификации Entity (атрибут, например, может действовать как идентификатор) и что-то вроде политики слияния (если 2 управляемых объекта представляют один и тот же объект, возьмите тот, у которого есть lastModificationDate подробнее недавний).
Мне просто нужно понять, как правильно объединить 2 контекста, чтобы иметь единственную обновленную копию для каждого объекта.
Проблема теперь ясна для меня. Контекст 2 имеет большую разницу: ObjectID. В то время как контекст в основном потоке извлекает ManagedObjects с помощью координатора постоянного хранилища, второй поток создает эти объекты, извлекая удаленный URL-адрес. Даже если объекты имеют одинаковое содержимое, у них будет 2 разных objectID.
У моих объектов уже был уникальный идентификатор, я мог бы использовать setObjectId, чтобы установить это значение. (В документации Apple говорится, что это НЕ очень хорошая идея).