带有谓词的核心数据获取请求。需要正确的 NSPredicate

Posted

技术标签:

【中文标题】带有谓词的核心数据获取请求。需要正确的 NSPredicate【英文标题】:Core data fetch request with predicate. Need right NSPredicate 【发布时间】:2013-10-13 15:09:20 【问题描述】:

我得到了具有两个 NSDate 属性 的实体。它们在这里:startTime, endTime 和两个限制,它们也在这里:NSDate *begin, NSDate *end

但问题是 endTime 可以为零

我需要获取以下所有实体:

(entity.startTime >= begin) AND (entity.endTyme == nil)

if (endType == nil)

(entity.startTime >= begin) AND (entity.endTyme <= end)

如果 (endTyme != nil)

如何从这两个 fetch 谓词中进行联合?或者也许使用过滤器?

【问题讨论】:

在什么情况下不起作用? 如果我在没有谓词的情况下获取,我会从数据库中获取所有实体,如果我使用这个谓词,我只会得到第一个实体。 First = 开始时间较早的实体 谓词似乎没问题。你能显示NSLog(@"predicate = %@", predicate)的输出吗? 您是否记录了beginend 的日期以及每个对象的日期?你能证明吗? 我没有看到任何错误 【参考方案1】:

您的设置和谓词是正确的。检查您的数据,您会发现谓词按预期工作。

【讨论】:

我同意,一切看起来都很好。问题很可能出在实际数据中 制作一个 NSLog 语句,显示开始和结束日期以及实体的日期。然后比较。 当我滚动 NSDatePicker - 两个 NSDate 是有区别的。但是当我按下“保存”按钮时 - 我在两个 NSDate 变量中得到了相同的日期。 宾果游戏! - 你发现了你的错误。如您所见,它与谓词无关。请接受答案。【参考方案2】:

(备注:你已经多次修改了你的问题。我最好追加 有关您的问题的新信息,否则很难获得 cmets 和答案 供未来的读者理解。)

获取开始时间>=给定时间且结束时间为nil的所有对象

[NSPredicate predicateWithFormat:@"(startTime >= %@) AND (endTime == nil OR endTime <= %@)",
       startTime, endTime]

【讨论】:

看这个帖子***.com/questions/19363500/…

以上是关于带有谓词的核心数据获取请求。需要正确的 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

核心数据获取请求中需要谓词?

核心数据获取请求关系属性谓词

获取复杂请求核心数据的谓词和表达式

核心数据 - 以一对多关系访问实例与获取请求?

核心数据获取谓词“不包含”?

作为获取谓词的日期范围 - 核心数据之间的 NSDate 谓词