2016-05-19 3 views
0

У меня есть приложение, и я использую CoreData для хранения данных. Все работает нормально, но я хотел легко получить доступ к моим данным для проверки цели. Итак, у меня возникла идея попытаться поделиться данными с iTunes (UIFileSharingEnabled). Теперь я могу видеть свою базу данных в iTunes, я могу скопировать файл .sqlite на свой Mac, и я могу проверить данные с помощью sqlite3.Как я могу принудительно обновить базу данных SQLite CoreData?

Все было в порядке, но я хотел проверить что-то еще, поэтому я изменил некоторые данные в своем приложении, и я не могу получить доступ к измененным данным. База данных .sqlite всегда несколько дней назад. У меня есть два других файла в разделе обмена iTunes (.sqlite-shm и .sqlite-wal), которые меняются (даты меняются при изменении данных), но я не могу «обновить» файл .sqlite.

Я попробовал принудительное закрытие приложения на iPhone, перестройку приложения, создание новых данных вместо изменения, без везения.

Данные в моем приложении верны, поэтому я предполагаю, что изменения хранятся в двух других файлах, но кто-нибудь знает, что я могу попытаться принудительно обновить файл .sqlite?

ответ

1

Согласно Technical Q&A1809, способу заставить SQLite объединить -wal файл в основной файл .SQLite является использование «отбрасывания режима журналирования», чтобы добавить магазин к персистирующему магазину координатор:

Для хранилище, которое было загружено в режиме WAL, если существуют файл основного хранилища и соответствующий -вальный файл, использование режима ведения журнала отката для добавления хранилища в постоянный координатор хранилища заставит Core Data выполнить операцию контрольной точки, которая объединяет данные в файле -wal в файл хранилища. На самом деле это метод Core Data для выполнения операции контрольной точки.

Техническое примечание содержит пример кода для достижения этого (хотя и цель C).

+0

Спасибо! Я не хотел менять программу (способ, которым Apple хочет, чтобы база была опубликована). Теперь, когда я знаю название процесса, я нашел манипуляцию, которая работает для меня [ссылка] (http://stackoverflow.com/questions/19574286/how-to-merge-contents-of-sqlite-3-7- wal-file-in-main-database-file) Отбросьте три файла из iTunes в папке/запуске sqlite3 для файла .sqlite/VACUUM;/Ctrl-D/Relaunch sqlite3 для файла sqlite -> Это актуально – FredericP

1

Другие файлы существуют, потому что в хранилище используется тип журнала SQLite. Вам просто нужно использовать этот тип при инициализации вашего инструмента sqlite3.

В идеале вы должны использовать код приложения только для опроса хранилища данных вместо использования sqlite3, поскольку структуру таблицы следует считать конфиденциальной.

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