【问题标题】:core data relationship retrieve using key使用键检索核心数据关系
【发布时间】:2016-05-24 17:07:58
【问题描述】:

我有如下数据模型关系(括号内是属性)

日(日期)------------>> 事件(日期,名称)

DayEvent之间存在一对多的关系。不存在反向关系(即 Event 实体没有对 Day 的引用)

首先创建并保存事件。日是稍后创建的。

在检索 Day 实体时,是否有办法让核心数据也去检索与该日期日期相同的每个 Event?我搜索了一些其他问题,但所有这些问题都包括在创建 Day 时手动设置 Events

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

    您使用NSFetchRequest 查询CoreData,它只能查询一种特定的实体类型(因此是initWithEntityName(_:) 初始化程序)。如果您没有在两个实体之间设置关系,则无法使用单个 NSFetchRequest 实例检索它们(假设您在两者上都有 date 属性,您可以使用相同的 NSPredicate )。

    话虽如此,正如其他问题的答案可能表明的那样,如果您设置了关系,则可以将 NSFetchRequest 实体上的属性 relationshipKeyPathsForPrefetching 设置为您的关系键是获取关系的实体当您获取初始实体时。假设您的目标是避免多次访问数据库,您可能还需要考虑将 returnsObjectsAsFaults 设置为 false(仅当对象数量相对较少时才这样做)。

    【讨论】:

    • 从文档中检索已经与 Day 实体关联的事件。我的问题是如何在不手动关联它们的情况下检索它们
    • @robola 正如我在回答中所说“如果您没有在两个实体之间设置关系,则无法使用单个 NSFetchRequest 检索它们。”
    • 我确实有关系。除非我误解了你的意思,否则我在 Day 实体和 Event 实体之间存在一对多的关系
    • @robola 我不是指您的数据模型中的关系,我指的是特定的 Day 实例和一个或多个 Event 实例被分配给彼此(通过您的数据中的关系模型)。如果您没有设置,则无法通过一个获取请求来完成您所要求的操作。
    • 啊。我现在知道了。谢谢。标记为答案
    【解决方案2】:

    正如 Charles 所说,只需发出两个 fetch 请求。第一个请求检索Day,然后第二个请求检索同一日期的Events

    不过,我要做的是建立反向关系并更改对象创建的时间。在创建Event时,如果没有Day对象可以链接,则同时创建一个新的Day对象。如果你这样做了,你可以自己获取一个Day,它的Events将通过关系自动可用。

    【讨论】:

    • 我将 Charles' 标记为答案,因为他首先回答,但我最终做了两个获取请求。我试图看看核心数据是否可以做到这一点。我不能做反向建议的原因有两个,第一个是不能保证每个日期都有一个 Day 对象,即使有,在创建 Event 时,我也没有足够的信息来创建它。这样我就可以避免在检索 Day 对象时检查它是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多