0

我一直在我的 iOS 应用程序中使用 sqlite 数据库来实现数据持久性,现在我正在尝试决定是否值得学习 Core Data。我一直在阅读一些关于其优缺点的文档和帖子,但我发现决定何时使用 Core Data 或 Sqlite 并不是很清楚(例如,Core Data VS Sqlite 或 FMDB ......?)。

我需要一些指导来了解我是否应该学习和使用 Core Data,或者使用 Sqlite 对我来说就足够了:

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

提前致谢

4

2 回答 2

1

Core Data 是一个很棒的框架,但是虽然它通常在幕后使用 SQLite,但您不应该将 Core Data 视为数据库引擎,而更像是一个对象持久性框架。如果您有大量 SQL 代码(尤其是批量更新等),则可能不值得转换为 Core Data。但 Core Data 有很多出色的性能优化、iCloud 集成等,因此值得更详细地研究。

如果您想了解 Core Data 的背景知识,我建议您观看 Apple 视频Working with Core Data

如果您只想简化 SQLite 代码,请查看FMDB


在回答您的问题时:

已经有 sqlite 脚本,是否可以从 sqlite 数据库中的数据构建核心数据模型?Afaik,(如果我错了,请纠正我)您可以使用 sqlite 来持久化 Core Data 对象,但是可以反向操作吗?

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

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

是的,你可以。不过,您必须定义您的模型以手动处理此问题(例如,添加用户标识符字段并相应地手动编码谓词/过滤器结果,就像您在 SQLite 中必须做的那样)。

于 2013-05-16T15:16:47.877 回答
1

应用开发,

只有你可以判断是使用 Core Data 还是坚持使用 SQLite。正如您在上面引用我的回答,您知道我的观点——使用 Core Data。让我把它放在你的上下文中。

最大的胜利是 Core Data 附带的抽象系列以及它们如何映射到 Objective-C 对象模型。这是您必须从 SQLite 应用程序手动处理的事情。(你能做到吗?是的。不过,你很可能会创建一个针对你的 SQL 模式进行调整的自定义接口。它几乎没有可重用性。这是一个长期的问题。)

至于谓词与 SQL 查询的问题,这是世界观的不同。也就是说,由于谓词可以应用于 NSSet 和 NSArray,它们具有超出 Core Data 所需的实用程序。知道如何使用谓词将是有价值的。例如,您可以轻松地执行查询以获取记录集合,然后使用谓词过滤它们,例如搜索表视图。

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

因此,我的建议仍然是:使用 Core Data。

安德鲁

于 2013-05-16T16:25:04.220 回答