使用核心数据将iPhone 2.x应用程序转换为3.0的提示
我有一个为iPhone OS 2.x开发的应用程序。出于显而易见的原因,该应用程序中的模型类是在没有核心数据的情况下编写的 既然3.x已经可用,我想知道我可以选择哪些选项来获取现有的模型类并用核心数据重建它们。除了显而易见的功能外,我还用我的模型做很多事情,比如序列化它们并将它们存储到sqlite3数据库中,这样我的应用程序就可以在没有任何网络连接的情况下工作。我希望核心数据也能帮助我做到这一点使用核心数据将iPhone 2.x应用程序转换为3.0的提示,iphone,objective-c,cocoa-touch,core-data,Iphone,Objective C,Cocoa Touch,Core Data,我有一个为iPhone OS 2.x开发的应用程序。出于显而易见的原因,该应用程序中的模型类是在没有核心数据的情况下编写的 既然3.x已经可用,我想知道我可以选择哪些选项来获取现有的模型类并用核心数据重建它们。除了显而易见的功能外,我还用我的模型做很多事情,比如序列化它们并将它们存储到sqlite3数据库中,这样我的应用程序就可以在没有任何网络连接的情况下工作。我希望核心数据也能帮助我做到这一点 另外,随着核心数据在应用程序中的合并,还有什么理由仍然使用sqlite3吗?您是否仍会将其用于提供脱
另外,随着核心数据在应用程序中的合并,还有什么理由仍然使用sqlite3吗?您是否仍会将其用于提供脱机内容、保留可能不一定有意义的统计信息来创建模型等用途?或者有没有办法将所有这些都整合到核心数据中?我发现在iPhone应用程序中使用核心数据的主要好处是:
- 保持引用完整性
- 基于模式更改的托管模型迁移
- 提供对象关系映射
- 大大简化了插入、连接和查询过程——例如,连接通常是通过“虚线”语法完成的
- 多存储覆盖(尽管寻找我的stackoverflow问题,看看它是否在sqllite上实际工作,仍在等待响应…)
- 结构化谓词构造—您可以将谓词创建为对象,而不是内嵌的sql语句
- 反射数据存储—您可以在运行时以结构化和静态分析的方式对数据存储进行内省
- 在核心数据管理对象模型中重新构建整个数据库模式
- 重写所有数据库查询和管理以使用核心数据
- 重写所有模型,使其由核心数据生成的托管对象支持,或扩展它们
- 手动将所有现有数据导入核心数据数据库
- 为可能编写更多代码做好准备!尽管核心数据为处理数据存储查询和管理提供了一个良好的对象框架,但它也以冗长为代价
- 要继续上一点,当您对模式进行相对较小的更改时,您将准备花费相对大量的时间提供模式映射并将其正确应用于现有模式
请注意,没有什么可以阻止您采取相反的方法:采用核心数据进行扩展功能,直到您对其感到足够满意,然后开始移植您的主要应用程序现有代码以使用核心数据。另一个答案很好,但我不同意主要是优雅和跟上技术的好处。。。转移到核心数据的真正原因实际上是性能和内存相关,在核心数据中,缓存管理非常智能,您需要做大量工作才能复制。这对我来说是唯一考虑它的唯一原因,因为它是非常冗长的,而且你还必须处理所有需要使用NSCONT来保存原始值的数据对象(我特别讨厌)。 对于类似于您的设置,我可能会采取的迁移方法是让每个模型类保留实际上是存储类的托管对象,这样您的整个代码就不必更改,只是模型对象中的一些内容,以及您为处理模型对象的创建或填充而可能构建的管理类。这甚至隐藏了NSNumber包装的原始问题 如果您正在强烈考虑使用核心数据,您可能想看看这本书,它也涵盖了iPhone特定的核心数据(包括NSFetchedResultsController): 你可以买一个电子书只解锁PDF版本,这不是太贵