Технические вопросы и ответы QA1809

Новый режим журналирования значения по умолчанию для Базовых Данных SQLite хранит в Индивидуалистах OS X и iOS 7

Q: Мое приложение копирует и восстанавливает Базовые Данные хранилище SQLite путем копирования файла хранилища. Это работает хорошо над iOS 6.x и Пума OS X, но перестало работать на iOS 7 и Индивидуалистах OS X после обновления к последнему SDK. Почему это?

A: Отказ происходит, потому что режим журналирования значения по умолчанию для Базовых Данных, которые хранит SQLite, был изменен на Write-Ahead Logging (WAL) в Индивидуалистах OS X и iOS 7. С режимом WAL Базовые Данные сохраняют основной файл хранилища нетронутым и добавляют транзакции к a -wal файл в том же расположении. После того, как Базовый контекст Данных сохраняется, -wal файл не удален, и данные в том файле не объединяются с файлом хранилища также. Поэтому просто создание копий файла хранилища, вероятно, вызовет потерю данных и несоответствие.

Если Вы создаете Базовый Стек данных из файла хранилища, сгенерированного путем копирования основного файла хранилища, но не соответствия -wal файл, Ваше приложение может перестать работать многими способами, включая:

Чтобы безопасно скопировать и восстановить Базовые Данные хранилище SQLite, можно сделать следующее:

Для получения дополнительной информации об изменении режима журналирования значения по умолчанию, см. сеанс 2013 года WWDC 207 Новые функции и возможности в Базовых Данных и iCloud.

Примечание: В iOS 6.x и Пума, значение по умолчанию является режимом журналирования отката, в котором Базовые Данные создают a -journal файл для временного хранения транзакций, обновляет основной файл хранилища на месте и удаляет -journal файл после сохранения контекста. Файл хранилища поэтому содержит актуальную базу данных.



История версии документа


ДатаПримечания
29.01.2014

Новый документ, описывающий изменение в режиме журналирования значения по умолчанию для Базовых Данных хранилища SQLite и потенциальное влияние.