使用现有(普通)模型将Core Data添加到iPhone应用程序

我有一个相当复杂的iPhone应用程序,它依靠API从服务器获取数据并将其显示给用户。 我有大约5个用于整个应用程序的模型类 - 它们只是扩展NSObject。

我想为模型添加一些持久性,以便即使设备处于脱机状态也可以使用应用程序的某些部分 - 它实际上基本上只是美化缓存。 我只希望我的模型的某些实例能够被持久化 - 例如,用户已加入书签的项目 - 而其他项目不应该,例如数百个搜索结果。

核心数据是否正确? 我能看到的困难是:

  • 我将不得不改变我在整个项目中实例化我的模型对象的方式。 我必须将它们初始化为上下文的一部分,如果它们实际上来自外部API,则这并不一定有意义。
  • 我需要小心,不要坚持我不想要的实例。 这似乎归结为在创建后立即删除托管对象(真的很尴尬),或者对于我不想保留的实例使用单独的非持久性上下文(更好,但仍然有点尴尬)
  • 我希望能够在整个应用程序中继续使用我的模型,而无需更改不需要关心持久性的代码,但根据我的要求,这似乎不可行。 另一种方法是与我的现有对象并行设置一组新的托管对象,并仅使用托管对象来实现持久性 - 但这种重复从未像是正确的解决方案。

    我是否应该试图将核心数据放在这里,如果是这样,怎么样? 或者我应该只看其他选项 - sqlite3(对于我需要的似乎有点复杂),用户默认值(可能不是他们想要的),甚至序列化并将我自己的对象写入文件(似乎是hack-ish )。

    感谢您的任何意见!


    为什么不看看NSKeyedArciver / Unarchiver? 我会说Core Data是与sqlite数据库一起处理大量数据的明显解决方案,但NSKeyedArchiver是我用来保存模型的。 在这里查看Apple的文档。 使用NSKeyedArchiver是非常简单的IMO,你可以随时随地存储任何你需要的东西。


    现在你将数据对象实例化为NSObject的子类。 您可以使用另一个间接级别来选择是否将对象创建为ManagedObjectModel的子类,并使用定义用于访问这些对象信息的接口的协议保持大部分应用程序不变,然后传递类型为id<DataObjectProtocol>对象id<DataObjectProtocol> 。 取不到将表示非本地对象。

    或者,您可以将所有内容创建为托管对象,并且不会存储除您本地不想保存的数据的密钥以外的任何内容。 因此,您可以知道是否存在任何对象以及如何获取它,但是您不会花费太多时间或空间来存储应保留在云中的数据。 做到这一点的方法是将除模型中的所有键都定义为可选。

    我会选择Core Data,因为它的灵活性,实用性和优化。 这真的值得学习。 我不会推荐sqlite3方法,iOS上的前进方向是Core Data。 如果您使用某种文件存储,则应该考虑批量读取和/或写入操作,因为您可能会遇到一些性能问题,例如执行多个小文件操作。

    链接地址: http://www.djcxy.com/p/54209.html

    上一篇: Adding Core Data to iPhone app with existing (plain) models

    下一篇: Git subtree or Git Sub module for large resources?