Я использую два MOC, один для основного потока и другой MOC на фоновом потоке. В основном потоке у меня есть UITableView, работающий с FRC (NSFetchedResultsController).CoreData не может выполнить ошибку во время операции сохранения из фона. MOC
Время от времени я запускаю массивную операцию сохранения, которая удаляет все объекты и создает несколько сотен новых объектов ... В этот момент я хочу, чтобы UITableView в основном потоке обновлял свои данные (используя FRC, очевидно,). Поэтому основной MOC регистрируется в уведомлении NSManagedObjectContextDidSaveNotification (полученном из фонового MOC) и запускает mergeChangesFromContextDidSaveNotification на этом этапе, чтобы убедиться, что UITableView обновляется соответствующим образом.
Все это работает нормально, пока я не попробую прокрутить UITableView во время операции сохранения. Когда я пытаюсь прокрутить представление, исключение «coredata не может выполнить ошибку». Это результат того, что FRC все еще удерживает объекты, которые уже были удалены (пока операция сохранения все еще выполняется, до того, как mergeChangesFromContextDidSaveNotification из уведомления NSManagedObjectContextDidSaveNotification будет получена на основном MOC). Это какое-то «условие гонки» между операцией сохранения и обновлением UITableView после получения mergeChangesFromContextDidSaveNotification.
Каков правильный подход к работе с этими двумя MOC и забота о FRC, чтобы он смог справиться с этим сценарием?
Спасибо. Я прочитал этот пост ... Каков наилучший способ рассмотрения архитектуры и сценария, которые я описал, чтобы «отказаться от этого объекта»? – Joel