【问题标题】:Define relationship type in Core Data在 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

希望有人能帮忙。

【问题讨论】:

    标签: objective-c ios xcode core-data


    【解决方案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 模型中,这总是一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2011-10-15
      • 2010-12-03
      相关资源
      最近更新 更多