0

現在、Phonegap 1.4.1 を使用してモバイル アプリに取り組んでいます。iOS (現在 5.1 を使用) では、アプリは localStorage からすべてのデータをロードしません。

アプリを初めて使用するときは、次のように localStorage にフラグを設定します。

window.localStorage.setItem("myFlag", "true");

「ItemA」「ItemB」「ItemC」も同様に設定します。これらのキーと値のペアはそれぞれ、アプリの使用中に異なるタイミングで設定されるため、設定される順序は定義されていません。

私の問題はこれです:

最初に既存のコピーを削除せずにアプリを再インストールすると、アプリには「MyFlag」、「ItemB」、または「ItemC」表示されなくなり、「ItemA」が表示されます。アプリのデータ ファイルをエクスポートし、 file__0.localstoragewindow.localStorage.lengthファイルを SQLite インスペクター (アプリ ストアのアプリ) で調べたところ、4 つのキーと値のペアがすべて表示されます。

iOS 5.1+ は localstorage を Cache フォルダに移動したので、ここで説明されているように file__0.localstorage ファイルのバックアップを実装しました。基本的に、アプリの一時停止と終了時に localstorage db を Documents フォルダーにコピーし、webViewDidStartLoad の実行時に Cache フォルダーに戻します。この部分は問題なく動作しているので、手順が問題を引き起こしているとは思いません (その手順を追加する前にアプリに問題の症状がありました)。

4

1 に答える 1

1

これは、ここで報告された Cordova (Phonegap) のバグの結果であることが判明しました。つまり、Apple が file__0.localstorage ファイルの場所を Cache ディレクトリに移動したことと、アプリの新しいバージョンにアップグレードするときにアプリのバンドル ID が変更され、いくつかの .plist ファイル エントリが変更されたという Apple のバグの組み合わせでした。新しいバンドル ID を反映するように更新されていません。

ここに添付ファイルとして投稿された提案された修正は、JSONKit を参照する参照 CDVInvokedUrlCommand がファイルに含まれていたため、すぐに使用できるものではありませんでした。そのため、最新の CDVInvokedUrlCommand.h と CDVInvokedUrlCommand.m、および JSONKit.h と JSONKit.m (すべて Cordova GitHub リポジトリから) をダウンロードする必要がありました。修正案の Phongap 1.4.1 バージョンの README.txt ファイルのコードにもエラーが含まれていました。と言いました:

6) アプリの「AppDelegate.m」で、「webViewDidStartLoad」関数を次のように置き換えます。

    - (void) webViewDidStartLoad:(UIWebView *)theWebView 
    {
        static CDVLocalStorage* localStorage = nil;
        if (localStorage == nil) {
            localStorage = [[CDVLocalStorage alloc] initWithWebView:theWebView];   
            [localStorage restore:nil withDict:nil];
        }

        return [ super webViewDidStartLoad:theWebView ];
    }

しかし、上記のメソッドの本体を、この署名を使用して既に持っているメソッドに追加するように指示する必要があります。前のメソッドの署名はどこにも存在しないため、行[localStorage restore:nil withDict:nil];を に変更する必要があります。[localStorage restore:nil];

もちろん、適切なインポートも AppDelegate.m に追加する必要がありました。


Phonegap の最新バージョンへのアップグレードは、それが可能な人にとって最も簡単な解決策です。ただし、(比較的突然) 古いバージョンの 1.4.1 と、新しいバージョンの Phonegap とはまだ互換性のないサードパーティのプラグインを使用しているため、この修正が最適でした。

于 2012-08-10T09:18:44.127 に答える