sqlite データベースを使用していた古い iOS アプリを更新しています。既存のテーブルに列を追加してデータベース構造を変更しました。今、私は自分のデバイスでそれをテストしています。iPad から古いアプリをクリアしてから、この新しい更新バージョンを実行すると、問題なく動作します。しかし、iPad に古いバージョンが既にインストールされていて、この更新されたバージョンをテストすると、更新されたデータベースではなく、古いデータベースが何らかの形で使用されます。なぜこれを行っているのか、誰かが私を助けることができますか?
3 に答える
私の推測とあなたのために簡単な答えをしようとすることはこれです。プロジェクトファイルのデータベースを更新した可能性があります。つまり、データベースを実行すると、新しいデータベースがバンドルに存在します。バンドル内のファイルは更新できないため、データベースをバンドルからコピーしてiosサンドボックスのどこかに保存するのが一般的な方法です。私は通常、ドキュメントディレクトリを使用してシンプルにしています。
おそらく何が起こっているのかというと、以前のインストールで実行すると、ファイルはすでにデバイスにコピーされているため、デバイスには触れないことがわかりますが、新しいインストールでは、データベースが見つからないため、コピーされる可能性があります。そこにあるので、新規インストールでは正常に機能しますが、既存のインストールでは機能しません。
アプリデリゲートまたはルートビューコントローラーで、既存のデータベースをチェックし、起動時に必要に応じてデータベースをコピーするコードを探します。
既存のインストールでデータベースを更新する必要がある場合は、強制的にコピーする必要があります。
ただし、既存のデータベースにデータがある場合は、重要な場合は上書きしないように注意してください。重要なデータがそこに保存されている場合は、データを取得して新しいデータベースにインポートするシェルゲームを実行するか、既存のデータベースでデータベーススキーマ変更コマンドを実行して同じようにする必要があります。 。
繰り返しになりますが、万が一の場合に備えて、これらのコマンドを実行する前に、ローカルデータベースファイルのコピーを作成してください。
幸運を祈ります
アプリの新しいバージョンをインストールすると、iOSは実際にアプリを新しいディレクトリにインストールしてから、ドキュメントフォルダーの内容を古いバージョンから新しいバージョンのアプリにコピーします。新しいデータベースだけを使用する場合は、このデータベースの名前を変更するか、アプリのドキュメントストア内の別のディレクトリに保存するのが最善の方法です。
iOSでのsqliteCoreDataバッキングストアの更新に関する関連記事は次のとおりです 。http ://www.musicalgeometry.com/?p = 1736
iOS では、SQLLite データベースは実際には単なるファイルです。古いアプリを使用すると、データベース ファイルにスキーマが作成されました。新しいアプリをロードしても、データはそのまま残ります。新しいスキーマを使用する場合は、古いスキーマを検出して既存のデータを更新する必要があります。これに対処する方法が文書化されていると思います。Bryanmac の質問リファレンスは、開始するのに適した場所のようです。