NSManagedObjectContext имеет устаревшие данные даже после сброса - PullRequest
3 голосов
/ 05 января 2012

Я использую CoreData с поддержкой SQLite в своем приложении для iOS.В определенный момент в приложении я хочу очистить все данные в базе данных и начать с нуля.Я удаляю свой NSPersistentStore из NSPersistentStoreCoordinator, затем удаляю файл БД с диска, создаю новый файл на диске, создаю новый NSPersistentStore и присоединяю его к NSPeristentStoreCoordinator.Я также вызываю метод сброса моих объектов NSManagedObjectContext.В этот момент происходит нечто очень странное.Для большинства запросов выборки к NSManagedObjectContext данные не возвращаются, поскольку база данных пуста.Однако для некоторого подмножества выборок я получаю данные обратно.Это не верно.В базе данных нет данных.

Одним из решений моей проблемы является создание нового NSManagedObjectContext при изменении NSPersistentStore, но зачем это нужно?

Вопросы:

Не должен ли [[NSManagedObjectContext reset] 'очистить все кэши и извлечь свежие данные из базы данных?Почему большинство запросов работают правильно и только некоторые возвращают старые данные?Мне бы очень хотелось понять, что происходит кэширование в NSManagedObjectContext или, возможно, NSPersistentStoreCoordinator.

Вот код, который я запускаю при удалении и воссоздании базы данных.

...