2015-02-03 3 views
0

ОБНОВЛЕНО: Я пытаюсь выполнить резервное копирование и восстановление файлов основных данных (используя журнал и MagicalRecord на основе issue #444). При работе под симулятором iOS я знаю, что файлы перемещаются каждый раз из последнего исполнения приложения. Here - это полный код (я ставлю его здесь, потому что он длинный, и теперь он отформатирован, а синтаксис выделен, что упрощает чтение).Почему мое восстановление файлов основных данных не найдено приложением?

Я могу найти новое место при запуске приложения, восстановить мои сохраненные файлы и выполнить восстановление из файлов в папке «Документы», поместив их в нужное новое место, как определено выводом консоли из инструкций NSLog (это не означает, t показывает, что файл -shm восстанавливается, но он находился в том же месте).

AppDelegate-sqliteFilePath:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/данные/Контейнеры/Data/Application/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Поддержка библиотеки/Application/SalonBook

SVC-sqliteFilePath:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/данные/Контейнеры/Data/Application/B424CA1A-D41C- 488D-A7E9-0F13CB2244B3/Библиотека Поддержка/Application/SalonBook

documentsBasePath:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/данные/содержать ERS/Data/Application/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Документы

Отправной - storePath:/Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/данные/Контейнеры/Данные/Приложение/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Библиотека/Поддержка приложений/SalonBook/saori.sqlite

Закончено! storePath:/Пользователи/rolfmarsh/Библиотека/Разработчик/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Контейнеры/Данные/Приложение/B424CA1A-D41C-488D-A7E9-0F13CB2244B3/Библиотека/Поддержка приложений/SalonBook/saori.sqlite-Wal

Когда я начинаю восстанавливать, я выдаю:

[MagicalRecord cleanUp]; // disable Core Data 

Когда я заканчиваю восстановление, я выполняю следующее:

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"saori.sqlite"]; // enable Core Data migration 
defaultContext = [NSManagedObjectContext MR_defaultContext]; // set default NSManagedObjectContext for MagicalRecord 

Когда я смотрю на что должен быть в хранилище основных данных (с использованием SQLite Browser), : в файле sqlite (saori.sqlite), но они не отображаются в приложении! Это похоже на то, что стек МР не был настроен правильно или контекст по умолчанию каким-то образом. Любая идея, как это исправить?

+1

Когда вы очищаете и затем восстанавливаете стек Core Data, как вы можете сообщить об этом своему пользовательскому интерфейсу? –

+0

Я только что провела еще одно испытание; есть данные в файлах sqlite, они просто НЕ восстанавливаются правильно (я проверил файлы в Finder, использовал SQLite Browser для просмотра содержимого и проверил имя файла в журнале консоли при запуске приложения, и они являются то же !.) .. независимо от того, сколько раз я перезапускаю приложение, данные не отображаются в приложении ... очень странно! – SpokaneDude

ответ

0

ОК, поэтому после того, как у вас есть немного проды и тыкать, я считаю, что +[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], а затем восстановить весь стек, как вы были (хотя вы могли бы просто привязать обновленный постоянный магазин к координатору, а не полностью сдуть все).