[英]Only partially retrieved localStorage data
我目前正在使用Phonegap 1.4.1開發移動應用程序。 在iOS(當前使用5.1)上,該應用不會從localStorage加載所有數據。
第一次使用該應用程序時,我在localStorage中設置了一個標志,如下所示:
window.localStorage.setItem("myFlag", "true");
我還以相同的方式設置了項目“ ItemA”,“ ItemB”和“ ItemC”。 這些鍵/值對中的每一個在應用程序的使用過程中都在不同的時間設置,因此設置時沒有定義的順序。
我的問題是這樣的:
當我重新安裝應用程序,而不先刪除現有副本,應用程序不再看到“MyFlag”,“ItemB”或“ItemC” -它確實看到“意達”。 使用window.localStorage.length
返回1,應返回4。我已經導出了應用程序的數據文件,並使用SQLite Inspector(來自應用程序商店的應用程序)檢查了file__0.localstorage文件,它顯示了所有四個鍵/值對。
由於iOS版5.1+已經移動到的localStorage的緩存文件夾,我已經實現了file__0.localstorage文件所描述的備份這里 。 基本上,要做的是在應用程序暫停並退出時將localstorage db復制到Documents文件夾,並在執行webViewDidStartLoad時將其復制到Cache文件夾。 這部分工作正常,所以我不認為該過程引起了問題(在我添加該過程之前,該應用程序中存在問題的症狀)。
原來,這是此處報告的Cordova(Phonegap)錯誤的結果 。 因此,這是蘋果將file__0.localstorage文件的位置移至Cache目錄和一個蘋果錯誤的結合,蘋果錯誤是在升級到新版本的應用程序時更改了應用程序的捆綁程序ID,並且沒有幾個.plist文件條目進行了更新,以反映新的Bundle ID。
提議的修復程序(作為附件發布) 在開箱即用時效果不佳,因為包含的文件引用了CDVInvokedUrlCommand,引用了JSONKit。 因此,也有必要下載最新的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尚不兼容-因此此修復最適合我們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.