0

私はsqliteでデータベースを作成しています。制約notnullで一意の新しいデータベースを作成し、それをアプリケーションのある場所に保存してから、アプリケーションからものを追加し、ライブラリ、アプリケーションサポート/ ... / ...でチェックします。 / ...そこに作成されたばかりのデータベースを確認すると、このデータベースには制約がなく、同じデータを受け入れます。

なぜこれが起こっているのですか?

アプリケーション データベースの作成中に作成したものとまったく同じ制約を使用して、このデータベースを作成するにはどうすればよいですか

はい、データベースを削除して再作成しようとしました

何か提案してください

4

1 に答える 1

1

2つの問題のいずれかが一般的にこの種の動作を引き起こします(データベースを更新しているときに、これがアプリに伝播されていない場合)。

  1. バンドル内のデータベースが更新されていません。これを確認するには、シミュレーターでアプリを実行し、バンドルを開いて(Finderでアプリに移動し、〜/ Library / Application Support / iPhone Simulator / ...に移動し、アプリ自体を選択して[パッケージの内容を表示]を選択します)、調べます。その場所に直接db。結論として、Xcodeは、Xcode自体の外部で変更されたファイルに対してバンドルを適切に更新しない場合があります。これは、Xcodeの[製品]メニューから[クリーン]を選択し、アプリを再構築して再インストールすることで修正されます。

  2. アプリがロードしているデータベースは、バンドル内のバージョンのコピーではありません。Documentsこれが問題のようには思えませんが、ファイルがまだ存在しない場合、多くの初めての開発者はデータベースをバンドルからフォルダーにコピーします。アプリを再度インストールすると、Documentsフォルダーの内容が保持されることを忘れてしまいます。 、したがって、古いバージョンがまだあります。テスト目的でこれに対処しようとしている場合は、アプリをアンインストールするか、シミュレーターをリセットしてください。

    長期的には、アプリ自体には、Documentsフォルダー内のデータベースのバージョン番号を検索し(この情報を使用して「構成」テーブルを作成します)、それをアプリが検出すると予想されるバージョンと比較し、異なる場合はアップグレードするロジックが必要です。Documentsフォルダ内のデータベース。

結論として、3つのデータベース(プロジェクトディレクトリ、バンドル、およびアプリのDocumentsフォルダー)をすべてチェックして、データベースの変更を失ったステップを確認すると便利です。

于 2013-03-19T12:48:35.693 に答える