2013-05-16 26 views
0

我一直在iOS数据持久化的iOS应用中使用sqlite数据库,现在我正在尝试确定是否值得学习Core Data。我一直在阅读一些关于其优点和缺点的文档和文章,但是我发现决定何时使用Core Data或Sqlite并不那么清楚(例如,Core Data VS Sqlite or FMDB…?)。iOS中的数据模型持久性考虑因素

我需要一些指导,知道我是否应该学习和使用的核心数据,或使用SQLite是足以让我:

  1. 已经有sqlite的脚本,是有可能建立从数据的核心数据模型sqlite数据库? Afaik,(纠正我,如果我错了)你可以使用sqlite来坚持核心数据对象,但它可以反向操作吗?
  2. 它是否适用于处理多个用户数据的核心数据?我需要考虑到不同的用户可以在同一台设备上登录应用程序。

在此先感谢

+0

我有两个主要产品,一个使用核心数据,另一个使用FMDB。我非常喜欢使用FMDB。核心数据的东西似乎是奥术而不是直言不讳,对我来说真的很痛苦。使用谓词,而不是简单的查询也是一种痛苦。 FMDB只是起作用,而且一直很愉快。它还处理多个登录人员。 – HalR

回答

1

核心数据是一个奇妙的框架,但同时它通常使用SQLite在幕后,你不应该觉得核心数据作为数据库引擎,而是更像一个对象持久化框架。如果你有很多SQL代码(尤其是批量更新等),那么可能不值得转换为Core Data。但是Core Data有很多优秀的性能优化,iCloud集成等等,所以值得仔细研究。

如果你想要核心数据的背景,我会建议苹果视频Working with Core Data

如果你只是想简化你的SQLite代码,请检查FMDB


在回答你的问题:

已经有sqlite的脚本,是有可能建立在SQLite数据库数据的核心数据模型? Afaik,(纠正我,如果我错了)你可以使用sqlite来坚持核心数据对象,但它可以反向操作吗?

您通常必须重新定义您的核心数据模型。它不能仅仅打开你现有的SQLite数据库(尽管一旦你定义了你的模型,你可以编写代码将数据从SQLite传输到核心数据)。

它是否适用于处理多个用户数据的核心数据?我需要考虑到不同的用户可以在同一台设备上登录应用程序。

是的,你可以。但是你必须定义你的模型来手动处理它(例如,添加一个用户标识符字段并相应地手动编写谓词/筛选结果,就像你在SQLite中所做的那样)。

1

AppsDev,

只有你可以判断是否使用核心数据或SQLite的坚持。正如你在上面引用了我的答案,你知道我的观点 - 使用核心数据。让我把它放在你的上下文中。

大赢家是Core Data附带的抽象系列,以及它们如何映射到Objective-C对象模型。这是你必须从SQLite应用程序手动处理的东西。 (你可以这样做吗?是的,但是,你很可能会根据你的SQL模式制作一个自定义的界面,它的可重用性很小,这是一个长期的问题)。谓词与SQL查询,这是世界观上的差异。也就是说,由于谓词可以应用于NSSets和NSArrays,它们具有超出Core Data所要求的效用。知道如何使用谓词将是有价值的。例如,您可以轻松地执行查询以获取记录集合,然后使用谓词对它们进行过滤,例如查找表视图。

每个人都准备好接受特定模式时需要选择。毫不奇怪,SQL专家喜欢坚持他们所知道的。动态的语言爱好者会有不同的选择。对于iOS/OS X来说,拥抱动态语言路径对于开发者来说将会增加您的价值。

因此,我的建议仍然是:使用核心数据。

Andrew

+0

有趣的评论,谢谢! – AppsDev