【问题标题】:Setting a value in one entity programmatically from another entity in Core Data从 Core Data 中的另一个实体以编程方式在一个实体中设置一个值
【发布时间】:2010-01-12 17:26:12
【问题描述】:

在 Core Data 中,我的模型中有三个实体:Worker、Task 和 SubTask。每个都与它下面的实体有一对多的关系和一对一的逆关系。 Worker有很多Task,每个Task有很多SubTask,每个SubTask有一个parentTask,每个Task有一个Worker。 SubTask 有一个 startTime 属性,它在 newObject 方法中设置为当前时间,还有一个按钮在我的 SubTaskArrayController 类中触发 endSubTask 方法。 endSubTask 计算 startTime 和 now 之间的时间,并为 SubTask 属性 timeWorked 设置该值。到目前为止,一切都很好。问题:

让所选任务的 totalTimeWorked 属性自行更新的最佳方法是什么?

当我尝试类似的事情时

[currentSubTask setValue:newTotalTime forKey:@"parentTask.totalTimeWorked"];

我明白了:

[setValue:forUndefinedKey:]:实体 SubTask 与键的键值编码不兼容 parentTask.totalTimeWorked。

如何访问当前选中的子任务的父任务的属性?

【问题讨论】:

    标签: cocoa core-data entity relationship accessor


    【解决方案1】:

    您正在使用密钥路径。您应该改用setValue:forKeyPath:

    【讨论】:

    • 哦。我认为这是我所缺少的基本内容。谢谢。这是一个好的做法还是我应该学习一个解决方案(NSFetchRequests?)让 Task 计算它本身的 totalTimeWorked?
    • 您可以在关键路径中使用@sum@count和朋友进行此类计算。我会简单地将持续时间存储在每个子任务中,然后将它们相加,而不是尝试将它们直接存储在任务中。对于像这样简单的事情,您通常还不需要NSFetchRequest
    • 'parentTask.subTask.@sum.timeWorked' 完美运行。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多