iPhone如何使用NSDate属性有效地获取第一个和最后一个Core Data实体?

时间:2012-07-24 15:17:16

标签: objective-c ios core-data nsdate nspredicate

我有一大堆具有日期属性的Core Data实体。我正在创建实体的报告,需要查找报告日期范围。报告中有大约1000条记录。

我正在考虑从NSFetchedResultsController获取获取的对象数组,并使用日期排序描述符对数组进行排序。然后获取该数组的第一个和最后一个对象以确定日期范围。我似乎记得日期操作很昂贵,并且不确定是否以这种方式对数组进行排序,获得1000个元素的数组是一个好主意。

是否有其他核心数据或谓词技巧可用于查询核心数据堆栈以查找具有最小或最大日期的对象?

这是我目前使用的代码,但如果有更快更有效的东西,我会徘徊:

 NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
    NSArray* sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

    NSArray* sortedDateArray = [NSMutableArray arrayWithArray:[fetchedResultsController.fetchedObjects sortedArrayUsingDescriptors:sortDescriptors]] ;       

    NSManagedObject* firstDateObject = [sortedDateArray objectAtIndex:0];  
    NSManagedObject* lastDateObject = [sortedDateArray lastObject];

1 个答案:

答案 0 :(得分:1)

无需使用FetchedResultsController。只需使用简单的FetchRequest,并利用聚合功能。

以下文档实际上有一个基于实体的最小日期属性的提取示例。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html#//apple_ref/doc/uid/TP40002484-SW6