我一直在我的iOS应用程序中使用sqlite数据库进行数据持久化,现在我正在尝试决定是否值得学习核心数据。我一直在阅读一些有关其优缺点的文档和帖子,但我发现决定何时使用Core Data或Sqlite并不是那么清楚(例如,Core Data VS Sqlite or FMDB…?)。
我需要一些指导才能知道我是否应该学习和使用Core Data,或者使用Sqlite对我来说已经足够了:
提前致谢
答案 0 :(得分:1)
核心数据是一个很棒的框架,虽然它通常在幕后使用SQLite,但您不应将Core Data视为数据库引擎,而应将其视为对象持久性框架。如果您有很多SQL代码(尤其是批量更新等),则可能不值得转换为Core Data。但Core Data有许多出色的性能优化,iCloud集成等,因此值得更详细地研究。
如果你想要核心数据的背景,我建议使用Apple视频Working with Core Data。
如果您只想简化SQLite代码,请查看FMDB。
回答你的问题:
已经有sqlite脚本,是否可以从sqlite数据库中的数据构建Core Data模型? Afaik,(如果我错了,请纠正我)你可以使用sqlite来保存Core Data对象,但它是否可以反向运行?
您通常必须重新定义核心数据模型。它不能只打开现有的SQLite数据库(虽然一旦定义了模型,就可以编写代码将数据从SQLite传输到Core Data)。
是否适合处理多个用户数据的核心数据?我需要考虑到不同的用户可以在同一设备中登录应用程序。
是的,你可以。你必须定义你的模型来手动处理这个问题(例如,添加一个用户标识符字段并相应地手动编码谓词/过滤结果,就像你在SQLite中必须做的那样)。
答案 1 :(得分:1)
AppsDev,
只有您可以判断是使用Core Data还是坚持使用SQLite。正如您上面提到我的答案,您了解我的观点 - 使用核心数据。让我把它放在你的背景中。
最大的胜利是Core Data附带的抽象系列以及它们如何映射到Objective-C对象模型。这是您必须从SQLite应用程序手动处理的内容。 (你能做到吗?是的。但是,你很可能会制作一个自定义界面,它可以调整到你的SQL模式。它几乎没有可重用性。这是一个长期问题。)
关于谓词与SQL查询的问题,这是世界观的不同之处。也就是说,由于谓词可以应用于NSSets和NSArrays,因此它们具有超出Core Data所需的实用程序。知道如何使用谓词将是有价值的。例如,您可以轻松执行查询以获取记录集合,然后使用谓词对其进行过滤,例如搜索表格视图。
每个人在准备接受特定模式时都需要选择。不出所料,SQL专家喜欢坚持他们所知道的东西。动态语言爱好者会有不同的选择。对于iOS / OS X,拥抱动态语言路径对于您作为开发人员来说将具有越来越大的价值。
因此,我的建议仍然是:使用核心数据。
安德鲁