2015-04-13 2 views
1

Я пытаюсь просмотреть данные, написанные Core Data в приложении iOS, которое я разрабатываю.Прочитайте файлы основных данных моего приложения (.sqlite, .sqlite-wal)

После того, как приложение запустилось некоторое время, и я предполагаю, что собрал некоторые данные, теперь я хочу просмотреть данные и посмотреть, что было написано.

Я пытался получать и просматривать файл .sqlite через получение контейнера приложение из устройства (Xcode> Устройства> MYAPP> Скачать контейнер ...).

Я получил файлы db, myAppDB.sqlite, myAppDB.sqlite-shm и myAppDB.sqlite-wal.

При попытке просмотреть их, похоже, что .sqlite - это пустой стол (за исключением, может быть, какого-то общего материала CoreData/sqlite), а файл -wal имеет всю информацию.

Дело в том, что wal имеет полезные данные при открытии его с помощью TextEdit, которые не показывают его в очень читабельном виде, и когда я пытался использовать приложение SQLite Manager, я предупреждаю заявив, что зашифрован, и меня попросят поместить пароль ...

Для чего важно, я пишу фреймворк, который обрабатывает db (файл модели и код для записи данных находятся внутри рамки) то у меня эта фреймворк работает в приложении, которое я разрабатываю. Это код, я использую, чтобы создать хранилище внутри структуры (с использованием MagicalRecord):

NSBundle *frameworkBundle = [NSBundle bundleForClass:[self class]]; 
[MagicalRecord setDefaultModelNamed:@"myAppStore.momd" inBundle:frameworkBundle]; 

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"myAppStoreDB.sqlite"]; 
[MagicalRecord setupCoreDataStackWithStoreAtURL:storeURL]; 

UPDATE: мне удалось открыть sqlite файл как Core-Data-Editor и CoreDataUtility, но они оба переопределение и удалить содержимое файла .wal и показать пустую таблицу ... У нее есть модель (имена/свойства сущностей и т. д.), но нет данных.

Мой wal файл 873KB, но когда я открываю sqlite с одним из этих 2-х инструментов он становится 0Bytes ...

ТЛ; дг

Как я могу просматривать информацию написанном Ядра Данные приложения, которое я разрабатываю?

+0

Я считаю, что он зашифрован и подписан вами, чтобы предотвратить проблемы конфиденциальности при развертывании. – Schemetrical

+0

@Schemetrical Да, я предполагал, что, но учитывая тот факт, что я никогда не подписывал/не зашифровывал его, это делается с некоторой конфигурацией по умолчанию, что я не мог понять, как расшифровать ... И здесь мне нужна помощь. .. –

+0

Ни один файл не зашифрован. Пока вы не нарушаете связь между файлом '.sqlite' и файлом' -wal', все данные должны быть видимыми, если вы открываете файл '.sqlite' с помощью SQLite Manager (даже без [контрольной точки] (http://www.sqlite.org/wal.html#ckpt)). –

ответ

1

Ну, по какой-то причине мне пришлось заставить не использовать WAL в моем магазине (используя @"journal_mode":@"DELETE", как объяснено, here).

Я тогда получил только .sqlite файл без smh и wal файлов, и был в состоянии открыть и просмотреть данные, используя 2 упомянутые средства (Core-Data-редактор и CoreDataUtility).

Я предполагаю, что это связано с тем, что я имею дело с CoreData из фреймворка (создание moc, создание сущностей, сохранение и т. Д.), А не из приложения. Другая догадка заключается в том, что это имеет какое-то отношение к тому факту, что я использую MagicalRecord.

Любые идеи относительно причины будут оценены ...

+0

С MagicalRecord, если я вызываю один из методов для сохранения данных на диск, таких как '' MR_saveToPersistentStoreWithCompletion', тогда данные очищаются от WAL до фактического файла sqlite. См. Https://www.sqlite.org/fileformat2.html для получения дополнительной информации о файле Write-Ahead-Logfile – yano

Смежные вопросы