Почему мое восстановление файлов Core Data не найдено приложением?
ОБНОВЛЕНО: я пытаюсь сделать резервную копию и восстановить файлы Core Data (используя журналирование и MagicalRecord, основанные на проблеме # 444). При запуске под симулятором iOS я знаю, что файлы перемещаются каждый раз с момента последнего запуска приложения. Вот полный код (я поместил его здесь, потому что он длинный, а теперь он отформатирован и синтаксис выделен, что облегчает чтение).
Я могу найти новое местоположение при запуске приложения, извлечь мои сохраненные файлы и выполнить восстановление из файлов в каталоге Documents, поместив их в правильное новое местоположение, как определено выводом консоли из операторов NSLog (он не показывает - файл shm восстанавливается, но он был в том же месте).
AppDelegate-sqliteFilePath: / Users / rolfmarsh / Библиотека / Разработчик /CoreSimulator/ Устройства /1EE69744-255A-45CD-88F1-63FEAD117B32/ данные / контейнеры / данные / приложение /B424CA1A-D41C-488D-A7E9-0F13CB / 244 Поддержка приложений / Библиотека / SalonBook
SVC-sqliteFilePath: / Users / rolfmarsh / Библиотека / Разработчик /CoreSimulator/ Устройства /1EE69744-255A-45CD-88F1-63FEAD117B32/ данные / контейнеры / данные / приложение /B424CA1A-D41C-488D-A7E9-0F13CB2244B3/ библиотека поддержки SalonBook
documentsBasePath: / Users / rolfmarsh / Библиотека / Разработчик /CoreSimulator/ Устройства /1EE69744-255A-45CD-88F1-63FEAD117B32/ данные / Контейнеры / Данные / Приложение /B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Documents
начальный - storePath: / Пользователи / rolfmarsh / Библиотека / Разработчик /CoreSimulator/ Устройства /1EE69744-255A-45CD-88F1-63FEAD117B32/ данные / Контейнеры / Данные / Приложение /B424CA1A-D41C-488D-A7E9-0F13CB2244B3/ Библиотека / Поддержка приложений / SalonBook/saori.sqlite
Законченный! storePath: /Users/rolfmarsh/ Библиотека / Разработчик /CoreSimulator/ Устройства /1EE69744-255A-45CD-88F1-63FEAD117B32/ данные / Контейнеры / Данные / Приложение /B424CA1A-D41C-488D-A7E9-0F13CB2244B3/ Библиотека / Поддержка приложений / SalonBook saori.sqlite-вали
Когда я начинаю восстановление, я выдаю:
[MagicalRecord cleanUp]; // disable Core Data
Когда я заканчиваю восстановление, я выдаю следующее:
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"saori.sqlite"]; // enable Core Data migration
defaultContext = [NSManagedObjectContext MR_defaultContext]; // set default NSManagedObjectContext for MagicalRecord
Когда я смотрю на записи, которые должны быть в хранилище основных данных (с использованием браузера SQLite), они находятся в файле sqlite (saori.sqlite), но они не отображаются в приложении! Это похоже на то, что стек MR не был настроен правильно, или контекст по умолчанию каким-то образом обманут. Есть идеи, как это исправить?
1 ответ
Хорошо, так что после небольшого количества подталкивания и осмотра, я полагаю +[MagicalRecord cleanUp]
нужна любовь По сути, координатор постоянного хранилища освобождается без предварительного удаления постоянного хранилища SQLite.
Как вы заметили в другом нашем разговоре об этом, вам нужно сбросить контекст управляемого объекта:
[[NSManagedObjectContext MR_defaultContext] reset];
Затем переберите все ваши постоянные хранилища, чтобы удалить их:
NSError *error;
NSPersistentStoreCoordinator *persistentStoreCoordinator = [NSPersistentStoreCoordinator MR_defaultStoreCoordinator];
for (NSPersistentStore *store in [persistentStoreCoordinator persistentStores]) {
BOOL removed = [persistentStoreCoordinator removePersistentStore:store error:&error];
if (!removed) {
NSLog(@"Couldn't remove persistent store: %@", error);
}
}
После этого должно быть безопасно позвонить [MagicalRecord cleanUp]
и затем восстановите весь стек, как вы (хотя вы можете просто присоединить обновленное постоянное хранилище к координатору, а не полностью уничтожить все).