如何在CoreData关系属性中最好地存储可能具有多种不同类型的对象



我需要在iOS应用程序中存储活动提要。活动提要项将有一个payload字段,它可以是系统中许多(我实际上是指许多)类型的实体之一。

在我的CoreData模型中,在Activity实体上实现这个payload关系字段的好方法是什么?

是否可以使用id数据类型,或者可能使用NSManagedObject类型?

解决这个问题的一种方法可能是将CoreData的entityId作为字符串存储在一个特殊字段中,但如果有更好的方法,我宁愿避免这种情况。


示例:

为了简单起见,假设我们有一个不那么标准的博客模型:UserBlogBlogPostComment,可能会发生以下活动:

  • 用户可以创建一个新博客
  • 用户可以发布新的博客文章
  • 可以对博客发表评论
  • 一条评论可能会被点赞
  • 等等

其中的每一个都在网站上生成一个新的Activity项目,该项目又与被修改或正在执行的项目具有相关的payload关系

现在我需要下载,翻译和存储这些活动提要项目从网站在我的iPhone应用程序。。。那么我该如何模拟这个payload字段,因为它可能指向任何可能的实体?

然而,在我的真实代码中,大约有10多种类型的实体可以放入这个payload字段,所以我在这里寻找一个好的方法。

如果您不需要搜索/查询变量类型对象的字段,那么我建议使用NSCoder将它们转换为二进制表示,并将它们存储在托管对象的BLOB字段中。您可能还想将某些类型信息存储在同一托管对象的其他字段中。另一方面,如果需要在这些变量对象之间进行搜索,则必须为每个对象创建一个新的托管对象类型(实体)。请参阅我的答案:NSCoding VS Core data

您唯一可以使用的是NSManagedObject。因此,您必须创建模型和关系,并为活动和负载创建新文件,这些文件将是NSManagedObject的子类。

请参阅核心数据编程指南。你会在那里找到答案。

最新更新