objective-c - 核心数据谓词日期比较

标签 objective-c cocoa nsdate predicate

我试图获取与用户选择的日期(它是一个 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/

相关文章:

iphone 如何从月份编号获取月份名称?

ios - 仅更改部分 UIView 的颜色

iphone - 这个 Nsarray 定义有什么问题

objective-c - 应用程序启动时立即执行任务

cocoa 抽吸噪音

swift - 在 Swift 中向 OSX 项目添加测试时无法访问主要目标方法

ios - 简单的 segue 在 xcode 7 中不起作用

cocoa - 如何使用 NSTrackingArea

objective-c - 如何将 .hour() 和 .min() 从 Swift 转换为 Objective-C?

iphone - 如何获取一个月内的所有星期日