NSManagedObjectContext с разными процессами

#objective-c #cocoa #core-data #nsmanagedobject #nsmanagedobjectcontext

#objective-c #какао #ядро-данные #nsmanagedobject #nsmanagedobjectcontext

Вопрос:

У меня есть два процесса, которые взаимодействуют с одним и тем же постоянным хранилищем. Я сохраняю контекст для одного процесса и отправляю распределенное уведомление. Другой процесс видит распределенное уведомление и снова извлекает свои данные, но все равно получает старые данные. Есть ли какая-то «очистка», которую мне нужно выполнить, чтобы заставить другой процесс получать правильные данные из хранилища?

РЕДАКТИРОВАТЬ: Итак, получается, что я правильно очищал данные. У NSManagedObjects есть метод «refreshObject: mergeChanges», который вы используете для этого. Проблема, по-видимому, связана со временем. Допустим, у меня есть два процесса, A и B. Процесс A является основным процессом и выполняет сохранение в базе данных. Затем процесс B выполняет сохранение в базе данных и отправляет уведомление процессу A о том, что он это сделал, а процесс A извлекает новые данные. Я обнаружил, что если сохранение процесса A и сохранение процесса B находятся слишком близко друг к другу, старые данные извлекаются процессом A, даже если я обновляю. Если я заставлю пройти некоторое время между двумя сохранениями, тогда все получится правильно.

Очевидно, что это похоже на какое-то условие гонки, когда, возможно, уведомление отправляется до фактического сохранения данных в базе данных, однако уведомление отправляется в методе didSave управляемого объекта, и в этот момент контекст уже сохранен.

Ответ №1:

Вы должны проверить merge policy концепцию, чтобы управлять, получать и передавать правильные значения постоянного координатора хранилища между различными контекстами.

Здесь -> http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdChangeManagement.html#//apple_ref/doc/uid/TP30001201-CJBDBHCB

Это должно решить проблему.

Надеюсь, это может помочь.

Комментарии:

1. Оказывается, это не совсем то, что я искал