从Core Data中的两个不同实体获取数据

时间:2015-10-05 07:23:00

标签: swift core-data ios9

我有2个实体("成就"和" ShortTermGoal"),如屏幕截图所示。

我从成就实体中获取数据

shortTermSubGoalId = "PROVIDED_ID" 

现在我想从shortTermGoalName实体ShortTermGoal获取shortTermSubGoalId = "SAME_AS_PROVIDED_ABOVE"

我想要NSManagedObject应包含来自成就实体的所有数据和来自shortTermGoalName实体的ShortTermGoalNSManagedObject的每个对象都具有"成就&#的所有属性34; + shortTermGoalName ShortTermGoal实体的属性。

有可能吗? 如果是的话怎么样?

请分享代码段。

成就实体

Achievement

ShortTermGoal实体

ShortTermGoal

1 个答案:

答案 0 :(得分:0)

您只能获得与特定核心数据实体完全对应的NSManagedObject实例。他们不会将多个实体的属性组合成一个NSManagedObject实例。这只是Core Data无法像SQL一样工作的方式之一 - 您没有获取结果表,而是直接获取模型对象。

核心数据通过您配置的关系有不同的处理方式。

如果您获取Achievement的实例,您将获得该实体的所有属性。您还可以使用已有的ShortTermGoal关系访问相关shortTermGoal实体的所有属性。您可以通过以下几种方式获得shortTermGoalName的值:

  • 如果 为您的实体创建了自定义NSManagedObject子类,那么如果您有Achievement

    let achievement : Achievement = // Created somewhere else
    let name = achievement.shortTermGoal?.shortTermGoalName
    
  • 如果您尚未为您的实体创建自定义NSManagedObject子类,那么如果您的NSManagedObject对应Achievement

    let achievement : NSManagedObject = // Created somewhere else
    let name = achievement.valueForKeyPath("shortTermGoal.shortTermGoalName")
    

请注意,这假设您实际已为shortTermGoal关系分配了一个值。