4

私は 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

2 つ目の方法では、データベースがアプリに保存されます。

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

この 2 つの場所の違いは何ですか? 2 番目の方法では、データベースが含まれているため、アプリのサイズが大きくなる可能性がありますか? また、既存のデータベースを使用してアプリを AppStore にアーカイブ/送信したい場合、これが唯一の方法ですか?

4

1 に答える 1

5

主な違いは、ファイルをドキュメント フォルダーに格納すると、ファイルを書き込む (更新する) ことができるということです。これは、データベース ファイルにとって非常に重要です。アプリ バンドル内のファイルに書き込むことはできません。

アプリでデータベースを使用する通常のパターンは次のとおりです。

  1. 開発中に事前にシードされたデータベースを作成し、ビルド中にアプリ バンドルにコピーします。
  2. 実行時に、データベース ファイルが存在し、ドキュメント フォルダーに最新であるかどうかを確認します。
  3. そうでない場合は、アプリ バンドルからコピーします。
  4. ドキュメント フォルダでデータベースを開き、必要に応じて読み取り/書き込みを行います。
于 2016-01-05T10:49:10.097 に答える