多个平台的数据存储。我应该在我们的环境中使用Core Data吗?

时间:2012-04-03 18:23:41

标签: iphone ios orm cross-platform

我们有在Android,iOS和Windows移动设备上运行的本机应用程序。对于其他设备(如BlackBerry)的移动Web解决方案。这些应用程序目前从我们的CMS开始大量提取,然后从我们的CMS解析XML作为其数据存储。然后,该数据可在设备上离线使用。我们正在寻找比XML更优雅的东西。

以下是我们正在权衡的选项:

选项1.将sqlite数据库导出到Android,iOS和Windows 7手机,然后将它们用作数据存储区。

优点:CMS将相同的数据格式导出到所有设备

缺点:iOS没有使用CoreData,就像我读过的所有内容一样,我应该使用它。

选项2.将sqlite DB导出到所有平台,但将iOS数据插入CoreData。我们正在考虑将CMS导出JSON格式到iOS并将iOS插入到CoreData,因为我们对应用程序的增量更新将使用JSON。

优点:iOS正在使用CoreData及其所有好处。

缺点:iOS现在偏离了我们所有其他平台,因此它需要一个中间解决方案(将数据转换为CoreData存储。)

如果有人在需要持久存储的各种平台上拥有移动应用程序以及您的团队如何处理它,那就太好了。

2013年3月22日,以进行细微的澄清和语法修改。

2 个答案:

答案 0 :(得分:4)

在进行研究时偶然发现了这个解决方案: https://github.com/AlexDenisov/iActiveRecord

它的行为与CoreData类似,因此它使用对象图。它为您构建了幕后的SQL语句,因此您无需关心编写查询。

我喜欢这个解决方案的是iActiveRecord指向我们从CMS(使用django)导出的SQLite数据库,我们只是定义我们的Obj-C类来匹配表的模式(类似于在CoreData中定义数据模型) 。)在定义类模式以反映我们的表模式之后,我们可以开始使用对象而不必担心SQL查询。

CoreData无法做到这一点,因为它要求我们编写一个"转换器"将CMS中的数据导出到CoreData的数据存储区。

当然,缺少CoreData的所有额外花哨功能,但对于我们的使用案例,使用iActiveRecord会权衡其他选项。

答案 1 :(得分:1)

真正的问题是:你能真正重用这些平台上的任何代码吗?不多。也许,担心它太少了。事实上,如果你没有一个通用的C / C ++库(在广义上,如在一组函数中)来处理SQLite数据库中的数据,那么重用的代码就不多了。

在某些情况下,您可能会严重依赖某些SQL查询以获得良好的性能。这些查询在核心数据中可能效率非常低。在这种情况下,我会使用SQLite和FMDB

如果查询足够简单并且您主要需要显示/编辑数据,那么使用Core Data会更容易。