Phonegap(1.4.1)存储不再适用于iOS 5.1

时间:2012-03-12 16:51:59

标签: iphone ios sqlite ios5 cordova

我使用Phonegap为Android和iOS开发了一款应用程序。两个应用程序都已成功运行并可在商店中使用。现在我为更新添加了一些更改。如果我在先前版本中存储了数据(使用SQLite数据库)并更新到新版本,则IOs 5.1上的存储Api将不再起作用。

如果我打电话

 var db = window.openDatabase("mydb", "1.0", "", 5000000);
没有任何反应。

它适用于Android,如果我进行新安装或者我的应用程序的先前版本没有数据存储在数据库中,它也可以正常工作。我正在使用其他Phonegap函数,如Notification或localStorage,它们工作得很好。

任何帮助都会非常感激,因为我真的没想到了:)

3 个答案:

答案 0 :(得分:2)

Webkit存储和iOS 5.1的问题都有解决方法

  1. 存储从/ Webkit移至/ Cache
  2. 在iOS 5.1(WebKit Bug)下的应用更新中,存储未调整为更新的文件夹结构
  3. https://issues.apache.org/jira/browse/CB-330

    这个解决方案似乎比仅仅更改调用私有API的Webkit数据的位置更安全。在App运行时,使用Webkit存储位置。在恢复或终止所有数据时,将备份到文档文件夹。时间戳确保ab旧备份无法覆盖较新的存储数据(如果应用程序崩溃...)。

    最好的:使用带有该修复程序的应用程序的旧iOS版本的用户,在任何iOS更新的情况下都不会遭受损失。这就是为什么人们不应该等待...

答案 1 :(得分:1)

奇怪的是,它应该正常工作......顺便说一下,在iOS5.1中,WebSQL被认为是可以随时删除的临时数据......

可以更改调用私有API的WebKit数据的位置。您应该能够将位置设置为文档等安全文件夹。我还没有测试过这个解决方案,但看看这篇文章:http://stackoverflow.com/questions/4527905/how-do-i-enable-local-storage-in-my-webkit-based-application

我认为更安全的方法是使用带有phonegap插件的SQLite(与WebSQL相同)。该插件将数据库保存在Document文件夹中,这意味着数据库不会被删除并由iCloud保存。

以下是Native SQLite phonegap插件:https://github.com/davibe/Phonegap-SQLitePlugin 关于这个插件,WebSQL API之间存在一些差异,这里有一个适配器: https://gist.github.com/2009518

您还应将旧的WebSQL db文件(存储在Library / WebKit或Caches目录中)迁移到Document文件夹。这是一个代码: https://gist.github.com/2009491

最新版本的Cordova还实现了一个修复:https://issues.apache.org/jira/browse/CB-330(它备份了Document文件夹中的DB文件)

如果数据很重要,您应该将其保存到服务器。我写了一个小的lib来将SQlite DB同步到服务器: https://github.com/orbitaloop/WebSqlSync

答案 2 :(得分:0)

在此基础上创建了一个Jira问题:localStorage / SQLDatabase Error after App update