Это хорошая идея. Проблема в том, что, если вы получите идентификатор, он подвергается IO. Предварительная выборка не решает эту проблему.

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

Начать новую темуПолучать новые данные с сервераСоздать новый контекст управляемого объектаОтправить уведомление в основной поток, чтобы объединить два контекста

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

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

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

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

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

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

ОБНОВЛЕНИЕ 1

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос