1

我有一个基于 PhoneGap 的 iOS 应用程序,它使用 SQLite DB 进行离线存储。在 iOS 5.1 中更新应用程序后,该应用程序无法运行。相同的应用程序在低于 5.1 的版本中运行良好。

我探索了一些东西,我的分析是

  1. 当我们安装一个应用程序时,iOS 会为此创建一个单独的沙箱,并且与该应用程序相关的所有数据都会进入其中。
  2. 在 iOS5.1 中,当我们更新应用程序时,会创建新沙箱,并将旧沙箱中的内容移到此处。
  3. 对于 WebSQL,即 iOS 5.1 中 PhoneGap 的 SQLite,数据库存储在缓存文件夹(易失性存储)下。但在以前的 iOS 版本中,SQLite DB 存储在 Sandbox 中的 Documents 文件夹下,该文件夹是持久存储。
  4. 真正的问题是缓存/首选项中有一个名为“.preferences”的文件,该文件具有 websql DB 的路径。当我更新应用程序时,沙箱路径发生更改,但在此文件中,以前的沙箱路径仍然可用,因此应用程序无法正常工作,因为以前的路径已从设备中删除。

这是苹果的问题还是可以由开发人员解决?

4

2 回答 2

1

我已经解决了这个问题

iOS 用来查找 WEB DB(SQLite) 和本地存储的路径存储在 NSUserDefaults 中。因此,当我每次启动应用程序时,我都会检查路径信息并确保它与新的沙箱路径匹配,否则我会设置该键的值,现在应用程序可以正常工作。

NSUserDefault 引用 SQLite 路径的键是 WebDatabaseDirectory。

如果 Apple 在其下一个版本中发布了针对此问题的修复程序,则不需要此代码。

于 2012-05-03T21:38:05.790 回答
0

尝试使用 cordova-1.6.0 或更高版本。

当我更改为 cordova-1.6.0 时,我的问题得到了解决。

于 2012-05-06T13:32:33.903 回答