在 Core Data 中定义关系类型

Posted

技术标签:

【中文标题】在 Core Data 中定义关系类型【英文标题】:Define relationship type in Core Data 【发布时间】:2011-06-22 07:34:50 【问题描述】:

您好,我想通过添加额外的关系类型来设置两个messages 之间的关系。

例子:

message2 isDuplicate message3  
message3 isSuccessor message4
message4 isPredecessor message3
etc.

类型的数量不是固定的,因此为每种类型添加关系并不是一个真正的选择。我的 SQL 会做类似的事情:

Message_id_, text
msgRelation_msgID1_, _msgID2_, type 
//_msgID1_, _msgID2_ foreign keys to Message.id

希望有人能帮忙。

【问题讨论】:

【参考方案1】:

听起来您需要添加一个实体来为关系本身建模。

RelateType
  type:string // ...isDuplicate, isSuccessor, isPredecessor etc
  fromMessage<<-->Message.toMessages
  toMessage<<-->Message.fromMessages


Message
  title:string
  toMessages<-->>RelateType.fromMessages
  fromMessages<-->>RelateType.toMessages

RelateType 将在任意两个Messages 之间架起一座桥梁。 RelateType.type 关系可以让您对任意类型的关系进行建模。要按类型查找任何特定的 Message 对象关系,您只需:

NSString *relateType=@"isDuplicate";
NSPredicate *p=[NSPredicate predicateWithFormat:@"type == %@", relateType];
NSSet *duplicateMsgs=[msgObj filteredSetUsingPredicate:p];

或者,您可以在RelateType 实体上进行提取以查找所有特定类型的关系,例如所有isDuplicate 关系。

但是,通常如果您发现自己在做这样的事情,那是因为您试图将 SQL 模式硬塞到 Core Data 模型中,这总是一个错误。

【讨论】:

以上是关于在 Core Data 中定义关系类型的主要内容,如果未能解决你的问题,请参考以下文章

如何为依赖于关系的自定义 Core Data 属性发布通知?

如何在 Core Data 中存储一组自定义(和重复)对象?

Core Data 中的排序顺序具有多重关系

如何将 Core Data 与 ODBC 数据源一起使用?

Core Data:为啥要创建自定义持久存储?

Xcode Core Data 替代关系而不是通用类型的逆向关系