【问题标题】:Fetch Data from two different entity in Core Data从 Core Data 中的两个不同实体获取数据
【发布时间】:2015-10-05 07:23:00
【问题描述】:

我有 2 个实体(“Achievement”和“ShortTermGoal”),如屏幕截图所示。

我正在从成就实体中获取数据

shortTermSubGoalId = "PROVIDED_ID" 

现在我也想从ShortTermGoal 实体那里获得shortTermGoalName shortTermSubGoalId = "SAME_AS_PROVIDED_ABOVE"

我想要NSManagedObject 应该包含来自Achievement 实体的所有数据和来自ShortTermGoal 实体的shortTermGoalNameNSManagedObject 的每个对象都将具有“Achievement”的所有属性+shortTermGoalNameShortTermGoal 实体的属性) .

这可能吗? 如果是,那怎么办?

请分享代码sn-p。

成就实体

短期目标实体

【问题讨论】:

    标签: swift core-data ios9


    【解决方案1】:

    您只能获取与特定核心数据实体完全对应的NSManagedObject 实例。它们不会将来自多个实体的属性组合到单个 NSManagedObject 实例中。这只是 Core Data 不像 SQL 那样工作的方式之一——您不是在获取结果表,而是直接获取模型对象。

    Core Data 有不同的处理方式,通过您配置的关系。

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

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

      let achievement : Achievement = // Created somewhere else
      let name = achievement.shortTermGoal?.shortTermGoalName
      
    • 如果您还没有为您的实体创建自定义NSManagedObject 子类,那么如果您有一个对应于AchievementNSManagedObject

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

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

    【讨论】:

    • 我正在尝试获取 KeyPath "shortTermGoal.shortTermGoalName" 的值,但我没有得到任何值。
    • po obj.valueForKeyPath("shortTermGoal.shortTermGoalName") nil
    • 你有没有为这种关系设定过价值?这就是我在答案的最后一行所说的——这只有在你首先为关系分配一个值时才有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多