В чем разница между базой данных хранилища в разных местах в iOS?

Я работаю с SQLite.swift. В документе путь к базе такой:

let path = NSSearchPathForDirectoriesInDomains(
                .DocumentDirectory, .UserDomainMask, true
                ).first!

но я хочу импортировать и использовать существующую базу данных, поэтому я перетащил свою существующую базу данных в папку с расширением клавиатуры и создал подключение к ней с путем:

let path = NSBundle.mainBundle().pathForResource("db", ofType:"sqlite3")

Итак, я заметил, что в первом случае база данных будет храниться в /Users/*/Library/Developer/CoreSimulator/Devices/8B1DB861-AA3F-446F-A559-D4727CDB9285/data/Containers/Data/PluginKitPlugin/0BC647E4-26F3-4A1F-8271-CC73C96FD197/Documents

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

/Users/*/Library/Developer/CoreSimulator/Devices/8B1DB861-AA3F-446F-A559-D4727CDB9285/data/Containers/Bundle/Application/E5D9514C-859A-4D4D-A771-A8CE9CDCD3E7/AppName.app/PlugIns/AppNameExt.appex

Чем отличаются эти два места? Второй способ может увеличить размер приложения, потому что оно содержит базу данных? И если я хочу заархивировать/отправить свое приложение в AppStore с существующей базой данных, это единственный способ?


person TomSawyer    schedule 05.01.2016    source источник


Ответы (1)


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

Обычный шаблон для использования базы данных в приложении:

  1. Создайте предварительно заполненную базу данных во время разработки и скопируйте ее в пакет приложений во время сборки.
  2. При запуске проверьте, существует ли и актуален ли файл базы данных в папке документов.
  3. Если нет, скопируйте его из комплекта приложений.
  4. Откройте базу данных в папке документов и прочитайте/запишите по желанию.
person trojanfoe    schedule 05.01.2016
comment
Итак, вы говорите, что мы не можем писать/обновлять базу данных, если я храню ее в комплекте приложений? Я тестировал на симуляторе и все еще могу обновить существующую базу данных (которая хранится в комплекте приложения). И с обычным шаблоном использования базы данных первый шаг я сделал правильно, верно? Я перетащил файл db в папку расширения клавиатуры (Copy Bundle Resources), и после этого при запуске приложение создаст подключение к этой базе данных и будет использовать его? - person TomSawyer; 05.01.2016
comment
Нет, вы не можете писать в файл в комплекте приложений. Можно на симуляторе, но не на реальном устройстве. Да, это звучит нормально. - person trojanfoe; 05.01.2016
comment
Как именно я должен делать с Шагом 2? Можете ли вы дать мне пример кода? - person TomSawyer; 05.01.2016
comment
@TomSawyer Нет, я не могу. - person trojanfoe; 05.01.2016