可以将Cordova / Phonegap应用中的HTML5 localStorage同步到iCloud吗?

时间:2012-11-06 21:36:08

标签: core-data cordova local-storage icloud

我有一个在iOS上运行的Phonegap / Cordova应用程序。它将数据保存到HTML5 localStorage中。

如果可以将localStorage数据(使用iCloud)同步到其他iOS设备甚至OS X,我正在努力解决。

从我所看到的,在iOS中,localStorage实际上是作为SQLite数据库实现的,当使用Phonegap / Cordova时,它被写入应用程序的Documents目录:

文档/备份/ localstorage.appdata.db

我也理解在iCloud中存储数据有三种主要方式:

  • 键/值存储
  • UIDocument / NSDocument
  • 核心数据

我知道我无法使用Key / Value iCloud存储方法,因为我需要存储超过1MB的数据,并且使用该方法每个应用程序的限制为1MB。

This question,我相信是在谈论UIDocument方法,并询问是否可以使用该方法在iCloud中存储SQLite db文件。答案是否定的,因为数据库可能已损坏。

所以这真的离开了核心数据方法。

所以我的问题是 - 这会有用吗?我可以使用Core Data将localStorage.db文件同步到iCloud吗?

我从未使用过核心数据而且对此并不了解。我只是想知道它是否可能,或者是否有其他我不理解的东西。

还有其他方法可以在iOS设备或OS X之间同步localStorage数据吗?

1 个答案:

答案 0 :(得分:1)

答案不幸的是,核心数据无法与HTML5 localStorage一起使用

除了使用Core Data创建的数据库之外,核心数据不能与SQLite数据库一起使用。如果你尝试,你会在XCode中得到这个错误:

SQLite error code:1, 'no such table: Z_METADATA'

核心数据文档解释了这一点:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFAQ.html#//apple_ref/doc/uid/TP40001802-SW2

  

虽然Core Data支持SQLite作为其持久存储之一   类型,数据库格式是私有的。您无法创建SQLite   数据库使用本机SQLite API并直接与Core Data一起使用   (也不应该使用现有的Core Data SQLite存储来操作   原生SQLite API)

我仍然想解决这个问题。我正在考虑创建一个镜像localStorage API的Javascript API。这将是一个phonegap插件,可以调用objective-c代码,并有效地将其更改写入Core Data数据库。然后,核心数据数据库应该能够同步到iCloud。

如果有效,我会回来更新这个答案。