2011-08-12 4 views
0

私にとっては非常に不安なことを知りたいと思っていました。すなわちアプリケーションストアでアップグレードされたときのアプリケーションの動作

私はアプリを持っていると言います。 Appstoreにあり、正常に動作しています。 このアプリは5つのテーブルを持つことができるとローカルデータベースを持っています。

このアプリケーションをアップデートします。さらに2つの新しいテーブルを追加すると、合計7になります。

以前のバージョンのユーザーが新しいバージョンにアップグレードするとき。以前のバージョンのユーザーに対してもデータベースが更新されますか?

「はい」の場合? これまでのデータは削除されます。

でない場合、コードは明らかに、置き換えられない新しいものが必要になるため、いくつかのクラッシュを引き起こします。

あなたの貴重なご意見をお待ちしています。

答えて

1

なら、あなたはuseにする必要があります。

しかし、あなたは、あなたがあなたのデシベルにあなたのアプリのバージョン番号を保存することができたSQLite DB

を使用している場合、データベースが呼び出されるたびにと(新規インストール/アップグレードで)、新しい場合に予想されるバージョンに対するバージョンを比較バージョン>古いバージョンの場合SQL ALTER statementsを使用してスキーマを変更してください(データベースのスキーマを変更した場合はが必要です)、アプリケーションのバージョン番号を更新してください。ユーザーが更新または新規インストールしようとするたびにそう、それは

if it differ then update schema, and if its same no need to make any changes. 

あなたは、たとえば(任意のスキーマ関連の変更を行っていないだろう場合は

は、新しい列を追加し、あなたの古いバージョンで新しいバージョンを確認します。.. )あなたは心配する必要はありません、ユーザーはデータを失うことはありません。

0

データベースの配置場所によって異なります。アプリケーションバンドル内のすべてのファイルが置き換えられます。あなたがそれらを上書きしない限り、Documentsディレクトリ内のファイルは元のままです... データベースはどこに保存しますか?

私は、データベースをバンドルしてから最初に実行すると、ドキュメントディレクトリにコピーしてRWアクセスを得ることをお勧めします。 更新されたアプリケーションでは、ドキュメントがデータベースに存在するかどうかを確認し、それを読み取ってテーブルを新しいバージョンに更新します。そうでない場合は、ファイルをバンドルから新しい場所にコピーします。

1

ドキュメントディレクトリの内容は変更されません。 .appバンドルの内容は完全に新しいバージョンに置き換えられます。

データベースをドキュメントディレクトリに保存し、アプリケーションによって変更された場合は、新しいバージョンにアップグレードするために移行を実行する必要があります。単なる読み取り専用のデータベースであれば、新しいデータベースでコピーすることができます。

2

すべてがデータベースに依存します。 CoreDataを使用している場合、ユーザーデータを新しいデータベースと構造に移行できます。データモデルのすべての情報は、プロジェクトの.xcdatamodelクラスに格納されています。他のファイルと同じようにコードにバンドルされていません。

調べる必要があるのは、モデルバージョン管理識別子です。ここでは、MOM、管理オブジェクトモデルを増やすことができます。

また、データを移行することもできます。私は、バージョン管理と移行に焦点を当てて、CoreDataに関するAppleのドキュメントを検討します。がんばろう。データベースはcoredataに基づいて

Apple Core Data Versioning

関連する問題