1

まず、私は Core Data を使用しておらず、SQLite のみを使用しています。

データをテーブルに保存し、アプリを開いて SQLiteStudio を使用してデータを確認し、クエリを実行します。データが保存されていることを確認するためにログを作成することさえあります。はい、保存されています。しかし、シミュレーターを停止して再度実行すると、データがもうありません!

Xcode は毎回データベースを上書きしていますか? それとも、私の限られた知識の範囲外で何か他のことが起こっていますか?

4

1 に答える 1

4

アプリケーションのセットアップ方法、アプリをビルドするための構成方法、または問題の SQLite DB ファイルでの動作方法について詳しく知らなくても、確認できることについていくつかの指針を提供することしかできません。ファントム削除の原因となる可能性のあるコードとビルド構成。もちろん、提供する他の情報がある場合は、喜んで回答を編集します。

ケース 1: 'DB の作成' は常に実行されていますか?

アプリをつまずかせる可能性のあることの 1 つは、新しい SQLite DB ファイルを作成するか、既存のファイルを検索して開くという決定に至るまでに何が起こるかです。空の DB を作成するコードが常に実行されている場合、アプリが起動するたびに古い DB ファイルが空の DB で上書きされます。

ケース 2: 「スターター」または「テンプレート」の空のデータベースを使用していますか?

開発者は、初期データベース スキーマ (一般的なテーブルと構造) といくつかの既定またはサンプル データを含む空のデータベースを提供する場合があります。アプリがこれを行う場合、その既定のデータベースを適用する決定に至るまでのロジックが誤って常にトリガーされているのではないでしょうか? その場合、DB が正常に作成されたことを示すブール値を記録するために NSUserDefaults を使用すると、「スターター DB をロードする」コードをスキップするために使用できる可能性があります。または、DB ファイルの存在を確認したり、特定のテーブルの内容がテンプレート データと異なるかどうかを確認したりすることもできます。

ケース 3: 「ビルドして実行」と「ビルドせずに実行」の動作の違い

[Product] > [Perform Action] メニューには、[Run without Building] というラベルの付いたあまり知られていないオプションがあります。これは、シミュレーターまたはデバイス上で実行を終了したばかりのアプリケーションのバージョンを使用して、本質的に別のデバッグ セッションを開始します。このオプションを使用すると、データベースで別の動作が見られますか、それとも空白のままですか?

ケース 4: Xcode デバッグ セッション外のシミュレータで直接実行した場合の動作の違いは?

「実行」操作の一部は、最後の実行以降にアプリが変更されていない場合でも、「リソースのコピー」フェーズをトリガーする可能性のあるビルド フェーズです (質問の場合と同様です)。ストックの「デフォルト」または「テンプレート」DB ファイルを提供していて、アプリがアプリの最初の実行時に単にその「テンプレート」を開いて編集している場合、Xcode は後続の「実行」でそれをクリーン コピーに置き換える可能性があります。 「リソースのコピー」が行われている操作。この方法をテストする方法:

  1. 通常どおり Xcode を使用して、アプリをビルドしてシミュレーターに実行します。
  2. アプリのデータベースでデータを作成または編集する操作を実行します。
  3. Xcode の停止ボタンをクリックして、シミュレーターのホーム画面に戻ります。
  4. シミュレーターのホーム ボタンをダブルクリックします (ホーム ボタンがない場合は、CMD + SHIFT + H を 2 回押してマルチタスク バーを表示し、アプリケーションを強制終了します)。
  5. DB ファイルにデータが含まれているかどうかを確認します。
  6. データがない場合は、変更をデータベースに永続化する際に問題があり、まずその問題を解決する必要があります。さもないと:
  7. アプリを iOS シミュレーターから直接再起動し、さまざまな操作を実行して、データベースにさらに多くの、またはさまざまな変更を加えます。
  8. ホームボタンをクリックして iOS ホーム画面に戻ります。
  9. ステップ 4 で行ったように、アペラシオンを強制終了します。
  10. DB ファイルのデータが変更されている (ただし、データはまだある) か、空白になっているかを確認してください。

最後に、ユーザー データを保存する場所に関する Apple のガイダンスに従っていることを確認してください。誤って間違ったファイル パスに何かを保存しても、通常はデータが消去されない場合は、次のように解釈されるデータの書き込みが禁止されている可能性があります。特にメモリ内プロセスにまだ存在しているときにデータを問い合わせている場合、データが上書きされます。表 1-1 には、ファイル パスに関する非常に役立つガイダンスがいくつかあります。

Mac のハード ドライブでシミュレーター アプリを見つける

詳しく説明すると (これについては既にご存じかもしれません!)、iOS シミュレーター アプリケーションは、マシン上の他のファイルと同様に、Mac のハード ドライブに保存されます。彼らの組織は、物理的な iOS デバイスの組織を模倣しています。アプリとそのデータにアクセスするには:

  1. 新しい Finder ウィンドウを開きます。
  2. CMD+SHIFT+G を押すか、[移動] メニューから [フォルダへ移動] を選択します。
  3. 以下を「Go to Folder」ボックスに貼り付け、「Go」をクリックします: ~/Library/Application Support/iPhone Simulator/
  4. ビルドしたシミュレーターの iOS バージョンに一致するフォルダーを選択します。
  5. アプリケーションをクリックします。
  6. 次に、0 個以上のフォルダーが表示されます。表示される各フォルダーには、ハイフンで区切られた数字の文字列があります。アプリを含むリストが見つかるまで、このリストをナビゲートします。次に、このフォルダーからデータを参照してコピーし、Mac の他のツールで調査できるようにします。
于 2013-04-17T07:07:45.237 に答える