我试图获取与用户选择的日期(它是一个 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]]
关于objective-c - 核心数据谓词日期比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831600/