【问题标题】:Core data fetch request with predicate. Need right NSPredicate带有谓词的核心数据获取请求。需要正确的 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 的日期以及每个对象的日期?你能证明吗?
  • 我没有看到任何错误

标签: objective-c core-data nsdate nspredicate nsfetchedresultscontroller


【解决方案1】:

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

【讨论】:

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

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多