日期比较 NSPredicate
Date Comparison 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]
有效!
谁能解释一下这三者的区别。
第一种情况:
endTime < '2015-07-27 06:22:43 +0000'
。我确定 endTime
的数据类型是 NSDate
。运行时也尝试将 rhs 视为日期对象并尝试进行比较。但它是一个字符串。崩溃。
第二种情况:
这只是语法错误。 2015-07-27
后有一个空格。运行时不知道如何解析它。碰撞。
(即使您的谓词是 [NSPredicate predicateWithFormat:@"end_time < 2015-07-27"]
,它也是一种有效的谓词格式。但会因为 NSNumber
上的 unrecognized selector
而崩溃吗?我不确定。)
第三种情况:
rhs 是一个日期对象。 lhs 是一个日期对象。 timeIntervalSinceReferenceDate
在 NSDate
实例上调用。有效。
案例 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]
有效!
谁能解释一下这三者的区别。
第一种情况:
endTime < '2015-07-27 06:22:43 +0000'
。我确定 endTime
的数据类型是 NSDate
。运行时也尝试将 rhs 视为日期对象并尝试进行比较。但它是一个字符串。崩溃。
第二种情况:
这只是语法错误。 2015-07-27
后有一个空格。运行时不知道如何解析它。碰撞。
(即使您的谓词是 [NSPredicate predicateWithFormat:@"end_time < 2015-07-27"]
,它也是一种有效的谓词格式。但会因为 NSNumber
上的 unrecognized selector
而崩溃吗?我不确定。)
第三种情况:
rhs 是一个日期对象。 lhs 是一个日期对象。 timeIntervalSinceReferenceDate
在 NSDate
实例上调用。有效。