Предварительно заполненное хранилище Core Data SQL с новым журналом Write-Ahead Log (WAL)

Я хотел бы отправить свое приложение с хранилищем данных SQL, но теперь, когда Apple представила ведение журнала WAL, это создает 3 файла вместо одного, поэтому мне интересно, следует ли мне отправлять все 3 из них или я могу попытаться заставить SQL сделать контрольную точку, объединив все это в один файл .sql.

Я бы очень хотел использовать эту новую функцию iOS 7, поэтому возвращаться к ведению журнала отката для меня не вариант.


person Nikita Pestrov    schedule 03.11.2013    source источник


Ответы (2)


Чтобы заставить SQLite создать контрольную точку, выполните PRAGMA wal_checkpoint.

В качестве альтернативы отправьте базу данных с journal_mode = DELETE и измените режим после установки файла.

В любом случае, нет проблем с отправкой всех файлов. (Файл -shm не содержит постоянных данных и может быть проигнорирован.)

person CL.    schedule 04.11.2013
comment
Итак, я могу передать режим @DELETE при создании, а затем передать новый в финальном приложении? - person Nikita Pestrov; 04.11.2013
comment
Да, вы можете указать новые параметры в новом вызове addPersistentStoreWithType. - person CL.; 04.11.2013

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

NSDictionary *options = @{ @"journal_mode": @"DELETE" };

Тогда вы получите то же поведение журнала, что и в более ранних версиях iOS. Используйте это при создании предварительно заполненного хранилища данных, и вам не нужно будет иметь дело с дополнительными файлами журнала.

person Tom Harrington    schedule 03.11.2013
comment
Спасибо за ответ, но, как я уже упоминал в своем вопросе, я хочу использовать преимущества этого режима, поскольку я могу использовать в приложении одновременное чтение и запись, поэтому возвращаться к 2004 году, как поведение, не является способ. - person Nikita Pestrov; 04.11.2013