#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
концепцию, чтобы управлять, получать и передавать правильные значения постоянного координатора хранилища между различными контекстами.
Это должно решить проблему.
Надеюсь, это может помочь.
Комментарии:
1. Оказывается, это не совсем то, что я искал