【问题标题】:Using Core Data as a model when not all objects will be stored当并非所有对象都将被存储时,使用 Core Data 作为模型
【发布时间】:2010-08-12 16:44:59
【问题描述】:

我正在开发一个从 Web 服务器下载数据的 iPhone 应用程序,我有时(但并非总是)想要缓存这些下载的结果。我正在处理的实体是一个事件。事件以下列方式出现在 UI 中:

  • 作为基于位置的搜索的结果
  • 作为基于关键字的搜索的结果
  • 最喜欢的活动列表

只有在第三种情况下才有必要(或希望)将数据存储在本地数据库中。换句话说,我下载了一个事件,只有当用户决定将其添加到他们的收藏夹时,它才会存储在本地。

知道我正在下载的数据是 JSON 格式可能有帮助,也可能没有帮助。

我想使用一致的模型对象来表示事件,但有时它们会存储在数据库中,有时它们不会。我不希望我的视图控制器必须知道或关心对象来自哪里,它们应该能够显示来自本地缓存的事件,或者来自没有任何特殊代码的下载来处理任何一种情况。

因此,我可以使用 NSManagedObject(或其子类)来表示事件吗?如果我不这样做,在我看来,我将处理两个模型对象,一个是我的自定义对象,用于下载和未存储的事件,另一个是存储事件的 NSManagedObject 子类,两者都有相同的属性,但它们是根本不同的东西。

或者,是否有第三种选择,我创建某种装饰器对象(或协议?),它知道如何将来自视图控制器的请求代理到底层数据,有时是 NSManagedObject,有时是从生成的字典JSON?

这里推荐的解决方案是什么?

【问题讨论】:

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


    【解决方案1】:

    最简单的解决方案是通过NSManagedObject 上的-initWithEntity:insertIntoManagedObjectContext: 方法创建不带NSManagedObjectContextNSManagedObject 实例。

    当您想要真正持久化对象时,您需要做的就是在实体上设置上下文并保存上下文。

    【讨论】:

    • 我没有意识到 initWithEntity 可以为对象上下文取 nil 值。很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2015-07-07
    相关资源
    最近更新 更多