Почему мое восстановление файлов 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]и затем восстановите весь стек, как вы (хотя вы можете просто присоединить обновленное постоянное хранилище к координатору, а не полностью уничтожить все).

Другие вопросы по тегам