我试图获取与用户 selectedDate 匹配的实体中的所有对象(它是 NSDate)。
核心数据代码很好,但我的谓词一直返回 0 结果,数据库中的日期与用户选择的日期相同。
应如何使用谓词将 selectedDate 与实体中的日期进行比较?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(eDate = %@)", selectedDate];
你的谓词看起来没问题。
然而,您发现返回零结果的原因可能是日期不完全相同。
例如:
05/04/2012 13:37:00
将不匹配05/04/2012 13:37:01
因为这两个值并不完全相同。
您想检查日期(日、月、年)以及时间吗?
如果您只想检查日期,则应该创建开始日期和结束日期,并使用用户选择的日期作为参考框架来比较它们。
与此类似的内容应该创建 00:00:00 的日期和时间。
//gather current calendar
NSCalendar *calendar = [NSCalendar currentCalendar];
//gather date components from date
NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];
//set date components
[dateComponents setHour:0];
[dateComponents setMinute:0];
[dateComponents setSecond:0];
//return date relative from date
return [calendar dateFromComponents:dateComponents];
通过将小时、分钟和秒设置为 23:59:59 来创建另一个日期,并检查用户选择的日期是否在这些范围内。
[NSPredicate predicateWithFormat:@"date BETWEEN %@", [NSArray arrayWithObjects:startOfDay, endOfDay, nil]]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)