仅部分检索到localStorage数据
Only partially retrieved localStorage data
我目前正在使用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-所以这个修复程序最适合我们。
- 如何删除Localstorage中的数据
- 使用LocalStorage保存数据
- 如何在javascript中使用localStorage从数组中存储和提取数据
- 仅部分检索到localStorage数据
- 正在读取localStorage数据
- HTML5 localStorage覆盖数据
- 从localStorage检索数字数据
- localStorage为用户注册如何在不丢失数据的情况下重定向
- 从 JavaScript 中删除 HTML 5 localStorage 数据
- localStorage数据持久性
- 如何将localStorage数据写入Chrome中的文本文件
- 向PHP发送localStorage数据
- 使用AngularJS处理自定义的localStorage数据
- 如果人行横道更新它的内部浏览器,我的应用程序会丢失localStorage数据吗?
- 用localStorage数据更新reducer初始状态是一种好的做法吗
- 注销时使cookie/localStorage数据无效是一种好的做法吗
- 如何删除从某个字符串开始的localStorage数据
- 如果加载了localStorage数据,就警告用户
- 如何通过电子邮件将localStorage数据发送到客户端
- Ionic LocalStorage——数据不持久