1

オフライン ストレージに SQLite DB を使用する PhoneGap ベースの iOS アプリがあります。iOS 5.1 でアプリをアップデートした後、アプリが動作しません。同じアプリは 5.1 未満のバージョンで正常に動作します。

私はいくつかのことを調べましたが、私の分析は

  1. アプリをインストールすると、iOS はそのアプリ用に別のサンドボックスを作成し、そのアプリに関連するすべてのデータがそこに入ります。
  2. iOS5.1 では、アプリを更新すると、新しいサンドボックスが作成され、古いサンドボックスのコンテンツがここに移動されます。
  3. WebSQL の場合、つまり iOS 5.1 の PhoneGap の SQLite の場合、DB はキャッシュ フォルダー (揮発性ストレージ) に保存されます。しかし、以前のバージョンの iOS では、SQLite DB は永続ストレージである Sandbox の Documents フォルダーに格納されていました。
  4. 本当の問題は、websql DB のパスを持つ caches/preferences に「.preferences」というファイルがあることです。アプリを更新すると、サンドボックスのパスが変更されますが、このファイルでは、以前のパスがデバイスから既に削除されているため、アプリが機能していないため、以前のサンドボックスのパスがまだ使用可能です。

これは Apple の問題ですか、それとも開発者が解決できますか?

4

2 に答える 2

1

私は問題を修正しました

NSUserDefaults には、iOS が WEB DB(SQLite) とローカル ストレージを見つけるために参照するパスが格納されます。そのため、パス情報を確認するたびにアプリを起動し、そのキーの値を設定していない場合は新しいサンドボックス パスと一致することを確認すると、アプリは正常に動作します。

NSUserDefault SQLite パスで参照されるキーは WebDatabaseDirectory です。

Apple が次のリリースでこの問題の修正をリリースする場合、このコードは必要ありません。

于 2012-05-03T21:38:05.790 に答える
0

cordova-1.6.0 以降を使用してみてください。

cordova-1.6.0 に変更すると、問題は修正されました。

于 2012-05-06T13:32:33.903 に答える