Cordova IOS应用程序,丢失值使用window.localStorage存储

时间:2015-09-24 12:16:46

标签: javascript android ios html5 cordova

应用程序的简要概述: 我们有两个(IOS Cordova和IOS原生)工作应用程序,我们计划将应用程序与现有技术堆栈集成。我们通过在cocoapods的帮助下将Cordova应用程序转换为二进制文件并将其集成到IOS本机应用程序中成功集成,应用程序功能正常。

在IOS原生应用中,我们有多个网络视图。

问题:在Cordova应用程序中,有时我们会丢失使用“window.localStorage”保存的数据,此问题不一致,但在10次尝试中发生2或3次。

上述问题仅在应用程序的集成版本(Cordova + Native)中出现,而不是在独立版本的Cordova应用程序中出现。

我们在集成版本(Android原生+ Cordova android)中遇到了同样的问题,我们设法通过使用“addJavascriptInterface”覆盖“windows.localstorage”解决了这个问题

问题: 1)有没有人经历过当地存储价值的损失。 2)我们是否也为IOS提供了这样的选项(即“addJavascriptInterface”),如果是这样,请你解释一下如何或者你可以建议一些其他更好的选择来在Cordova webview和本地层之间通勤

注意:从Cordova webview到本地IOS的这种通勤应该是同步的而不是 asyn,因为我需要覆盖“windows.localstorage” 二手cordova版本3.6.3

提前致谢

3 个答案:

答案 0 :(得分:2)

从iOS 5开始,localstorage不是持久的。 localstorage的文件保存在目录... / Library / Caches中,如果系统空间很小,操作系统可能会删除该目录。有关iOS中文件系统的更多信息,请参阅:File System Programming Guide

根据cordova的文档,他们提到数据丢失是本地存储的一个缺点:"iOS stores localStorage data in a location that may be cleaned out by the OS when space is required."

因此,如果您的空间不足,数据丢失不是错误。

由于这个问题,我们正在寻找localstorage的替代方案。

经过研究,我发现plugin特别针对这个问题。此插件使用NSUserDefaults(iOS)和SharedPreferences(Android)永久存储数据。这实际上是我解决这个问题的首选方法。

出现此问题的其他方法通常是:

  • 将值存储在位于持久目录中的文件中。此解决方案适用于具有文件插件的所有平台。
  • 使用sqlLite。有许多插件可以提供此功能。

答案 1 :(得分:0)

我遇到过某些设备的问题。我们使用的十几种模型中有一种类似的问题。我将6个对象(字符串)存储在本地存储中,并且在这些设备上在意外时刻的某些对象可能会变为空。

在挖掘stackoverflow之后,我发现了一些类似的情况并没有明确地回答这个问题。例如,他们报告说:

所以,我还没有答案。

我自己的计划 - 使用文件或SqlLite。我确信使用FileAPI存储的文件在那里并且不会丢失。

答案 2 :(得分:0)

深入研究问题后,我们设法发现localstorage文件已损坏,导致数据丢失。

对我们有用的解决方案是:我们开始通过iOS的本机层备份localstorage文件。在我们的应用程序中,只有当用户从Native堆栈导航到混合堆栈时,我们才会遇到此问题,因为Native堆栈始终是用户事务的起点。

注意:我们已将Cordova应用程序(Cocoapods)集成到Native应用程序中。