在 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 属性发布通知?