使用 NSPredicate 比较核心数据查询中的日期

Posted

技术标签:

【中文标题】使用 NSPredicate 比较核心数据查询中的日期【英文标题】:Comparing dates in Core Data query using NSPredicate 【发布时间】:2012-02-14 10:16:31 【问题描述】:

我的核心数据模型有一个 NSDate 属性,如下所示:

@interface DBVial : NSManagedObject
@property (nonatomic, retain) NSDate * updated_at;

如何从 DBVial 的所有记录中获取最新(根据 updated_at)记录?我可以使用 NSPredicate 来执行它吗? 我知道我可以获取所有这些,然后对它们进行排序并获得第一个,但是否可以只使用 NSPredicate 来代替?

【问题讨论】:

【参考方案1】:

是的。无需使用NSPredicate,而是将NSFetchRequestsortDescriptor 设置为按日期对记录进行排序,并设置fetchLimit 以便您仅获得最近的记录。像这样:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"DBVial" 
                             inManagedObjectContext:yourManagedObjectContext];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"updated_at" ascending:NO]];
request.fetchLimit = 1;
NSError *error = nil;

DBVial *mostRecent =  [[context executeFetchRequest:request error:&error] lastObject];

【讨论】:

以上是关于使用 NSPredicate 比较核心数据查询中的日期的主要内容,如果未能解决你的问题,请参考以下文章

在保存到核心数据之前将字符串与 NSPredicate 进行比较

NSPredicate 使用核心数据实体的属性

使用 NSPredicate 过滤核心数据中的对象

使用 JOIN 访问 NSPredicate 中的核心数据实体关系

使用 NSPredicate 对表视图中的核心数据进行排序 (Swift)

NSPredicate 用于检查核心数据中的 NULL 和空白字符串