iphone - 使用 Core Data 将 iPhone 2.x 应用程序转换为 3.0 的提示

标签 iphone objective-c cocoa-touch core-data

我有一个为 iPhone OS 2.x 开发的应用程序。由于显而易见的原因,该应用程序中的模型类是在没有核心数据的情况下编写的。

现在 3.x 已经可用,我想知道使用现有模型类并使用核心数据重建它们有哪些选项。除了显而易见的事情之外,我还对模型做了很多事情,例如将它们序列化并将它们存储到 sqlite3 数据库中,以便我的应用程序可以在没有任何网络连接的情况下运行。我希望 Core Data 也能够在这方面帮助我。

此外,随着 Core Data 合并到您的应用程序中,还有什么理由仍然使用 sqlite3 吗?您是否仍然会使用它来提供离线内容、保存可能不一定对创建模型有意义的统计数据?或者是否有方法将所有这些合并到核心数据中?

最佳答案

我发现在 iPhone 应用程序中使用 Core Data 的主要好处是:

  • 保持引用完整性
  • 架构更改时的托管模型迁移
  • 提供对象关系映射
  • 大大简化了插入、联接和查询过程 - 例如联接通常只需通过“点”语法完成
  • 多个存储叠加(尽管查找我的 stackoverflow 问题,看看它是否真的适用于 sqllite,仍在等待响应...)
  • 结构化谓词构造 - 您可以将谓词创建为对象,而不是内联嵌入式 SQL 语句
  • 反射数据存储 - 您可以在运行时以结构化且可静态分析的方式自省(introspection)数据存储

也就是说,如果您的应用程序已经设计为针对 sqllite 数据库工作,那么您确实需要问问自己是否准备好转换应用程序。

您至少需要做这些事情:

  • 在 Core Data 托管对象模型中 reshape 整个数据库架构
  • 重写所有数据库查询和管理以使用核心数据
  • 重写所有模型,以便由 Core Data 生成的托管对象支持或扩展它们
  • 手动将所有现有数据导入核心数据数据库
  • 为可能编写更多代码做好准备!尽管 Core Data 提供了一个很好的对象框架来处理数据存储查询和管理,但它也是以冗长为代价的。
  • 继续上一点,当您对架构进行相对较小的更改时,您将准备花费相对大量的时间来提供架构映射并将其正确应用到现有架构。<

假设您已经解决了几乎所有这些问题,那么将现有应用程序移植到 Core Data 所获得的好处就是优雅并跟上最新技术。您必须付出相当大的努力才能实现这一点,而且考虑到好处可能并不惊人,您可能会发现它并不值得您花时间。

为了回答你的第二个问题,如果你说实话,我真的想不出直接使用 sqllite 的任何理由。例如,我不确定核心数据中的外连接是否非常简单。但是,您通常不会以这种方式使用 Core Data - 您可以在程序上使用它来实现与 SQL 中的外连接相同的效果。

对于统计和其他内容,我仍然会使用 Core Data,因为它提供了一些出色的聚合功能。

请注意,没有什么可以阻止您采取相反的方法:采用 Core Data 来扩展功能,直到您对它足够熟悉为止,然后开始移植主要应用程序的现有代码以使用 Core Data。

关于iphone - 使用 Core Data 将 iPhone 2.x 应用程序转换为 3.0 的提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1219442/

相关文章:

ios - 使用自动完成 api 获取邮政编码

ios - 应用程序图标未显示在 iPhone 上 - Xcode 9.1

ios - 如何动画和旋转按钮

ios - 如何处理自定义标注 View 上的点击?

objective-c - 我如何在 iphone 应用程序中设置表格 View 单元格属性

image - 从 Base64 编码的字符串加载图像

ios - 通过外观代理设置 UIBarButtonItem 的文本颜色

iphone - iOS : Get angle to geolocation from current location without map

ios - UIViewController 方法调整不起作用

ios - 在不使用 ASIHTTPRequest 的情况下在 iOS 中下载整个网页