日期比较NSPredicate

时间:2015-07-27 07:42:30

标签: ios core-data nspredicate

案例1:

[NSPredicate predicateWithFormat:@" end_time < '2015-07-27 06:22:43 +0000'"]

坠毁

reason: '-[__NSCFString timeIntervalSinceReferenceDate]: unrecognized selector

案例2:

[NSPredicate predicateWithFormat:@" end_time < 2015-07-27 06:22:43 +0000"]

坠毁

 reason: 'Unable to parse the format string " end_time < 2015-07-27 06:22:43 +0000"'

案例3:

[NSPredicate predicateWithFormat:@" end_time < %@",[NSDate date]

作品!

有人能解释我三者之间的区别。

1 个答案:

答案 0 :(得分:2)

第一种情况:

endTime < '2015-07-27 06:22:43 +0000'。我确定endTime的数据类型为NSDate。运行时也尝试将rhs视为日期对象并尝试进行比较。但它是一个字符串。崩溃。

第二种情况:

这只是错误的语法。在2015-07-27之后有一个空格。运行时不知道如何解析它。崩溃。

(即使您的谓词为[NSPredicate predicateWithFormat:@"end_time < 2015-07-27"],它也是一种有效的谓词格式。但由于unrecognized selector上的NSNumber会崩溃吗?我不确定。)

第三种情况:

rhs是一个约会对象。 lhs是一个约会对象。在timeIntervalSinceReferenceDate实例上调用NSDate。的工作原理。