仅部分检索到localStorage数据

Only partially retrieved localStorage data

本文关键字:localStorage 数据 检索 仅部      更新时间:2023-09-26

我目前正在使用Phonegap 1.4.1开发一款移动应用程序。在iOS(目前使用5.1)上,该应用程序不会从localStorage加载所有数据。

第一次使用该应用程序时,我在localStorage中设置了一个标志,如下所示:

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

我还以相同的方式设置了项目"ItemA"、"ItemB"answers"ItemC"。在应用程序的使用过程中,这些键/值对中的每一个都在不同的时间设置,因此没有定义它们的设置顺序。

我的问题是:

当我重新安装该应用程序时,如果不首先删除现有副本,该应用程序将不再看到"MyFlag"、"ItemB"或"ItemC"-它确实看到了"ItemA"。使用window.localStorage.length返回1,而它应该返回4。我已经导出了应用程序的数据文件,并使用SQLite Inspector(应用程序商店中的应用程序)检查了file__0.localstorage文件,它显示了所有四个键/值对。

由于iOS 5.1+已经将localstorage移到Cache文件夹,我已经实现了file__0.localstorage文件的备份,如下所述。基本上,它所做的是在应用程序暂停和退出时将localstorage数据库复制到Documents文件夹,并在执行webViewDidStartLoad时复制回Cache文件夹。这部分工作正常,所以我不认为是该过程导致了问题(在我添加该过程之前,应用程序中就存在问题的症状)。

这是这里报告的Cordova(Phonegap)错误的结果。因此,这是苹果将file__0.localstorage文件的位置移动到Cache目录,以及苹果的一个错误,即升级到新版本的应用程序时,应用程序的Bundle ID发生了更改,并且没有更新几个.plist文件条目以反映新的Bundle ID.

作为附件发布在这里的拟议修复程序并没有完全开箱即用,因为包含的文件引用了CDVInvokedUrlCommand,该命令引用了JSONKit。因此,下载最新的CDVInvokedUrlCommand.h和CDVInvakedUrlCommand.m以及JSONKit.h和JSONKit.m(均来自Cordova GitHub repo)也是必要的。建议修复的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-所以这个修复程序最适合我们。