在Core Data中定义关系类型

时间:2011-06-22 07:34:50

标签: objective-c ios xcode core-data

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

示例:

message2 isDuplicate message3  
message3 isSuccessor message4
message4 isPredecessor message3
etc.

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

Message{_id_, text}
msgRelation{_msgID1_, _msgID2_, type} 
//_msgID1_, _msgID2_ foreign keys to Message.id

我希望有人可以提供帮助。

1 个答案:

答案 0 :(得分:0)

听起来你需要添加一个实体来模拟关系本身。

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模型,这总是一个错误。