带有键值集合运算符的 NSPredicate

Posted

技术标签:

【中文标题】带有键值集合运算符的 NSPredicate【英文标题】:NSPredicate with Key-Value Collection Operators 【发布时间】:2011-09-10 16:15:44 【问题描述】:

我有一个核心数据模型如下 1.任务实体:属性objDueDate、关系objRecurrence等。 2. Recurrence Entity:属性objEndDate、objStartDate、Relationship tasks等

Task 与 Recurrence 具有多对一的关系。 Recurrence 与 Task 具有反向的一对多关系。我希望通过如下编写 NSFetchRequest 谓词来查询循环序列的最后一个任务

NSPredicate* lobjPredicate = [NSPredicate predicateWithFormat:"objDueDate == objRecurrence.tasks.@max.objDueDate"]

这失败并显示错误提示

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法为谓词生成 SQL (objDueDate == max:(objRecurrence.tasks.objDueDate))

谁能解释一下为什么这不起作用?

提前谢谢....

场景说明:

我希望显示按类别排序的任务。我还强制规定,如果您将任务设为重复,则重复中的所有任务将共享同一类别。现在有两组任务:一组重复,一组不重复。现在在重复序列中(比如说 A),我只想向用户呈现一个任务。如果序列中的所有任务都已标记为已完成,那么我希望将最后完成的任务呈现给用户。如果序列中的某些任务已被标记为已完成,那么我希望向用户展示第一个未完成的任务。

我该如何解决这个场景???

【问题讨论】:

【参考方案1】:

我有一个可以避免此错误的简化想法:获取按dueDate 排序的一次重复任务,并将fetchLimit 设置为1。

【讨论】:

大家好,我已经在一些地方使用了这个想法。但是我要问的是一个更复杂的查询的一部分,该查询需要所有有和没有重复的任务,并且对有重复的任务也有条件。我真的需要了解为什么上述方法不起作用才能修复我的查询的其他部分。我还需要 NSfetchedResultsController 中的最终结果,因此执行多个查询和形成字典的选项也不可用。【参考方案2】:

我不确定您为什么在谓词中同时使用 objRecurrence 和 tasks。如果它们彼此相反,那么您只需要遍历任务实体关系(objRecurrence)。这可能会解决您的问题。

【讨论】:

请看我对场景的解释

以上是关于带有键值集合运算符的 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript对象

Java集合Map

RedisRedis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )

带有分页、排序和过滤的 WebAPI Get 方法

查找表

React Native:键值数组还是哈希图?