【问题标题】:iPhone how to efficiently get the first and last Core Data entity with NSDate property?iPhone如何有效地获取具有NSDate属性的第一个和最后一个Core Data实体?
【发布时间】:2012-07-24 15:17:15
【问题描述】:

我有一组相当大的带有日期属性的核心数据实体。我正在从实体创建报告,需要找到报告日期范围。报告中有大约 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];

【问题讨论】:

  • 您使用 NSFetchedResultsController 的方法可能是解决方案。使用特定的 NSPredicate、NSSortDescription 创建 NSFetchedResultsController 并使用 [yourFetchController objectAtIndexPath:] 仅访问第一个和最后一个对象

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


【解决方案1】:

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

下面的文档其实有一个基于实体的最小日期属性取值的例子。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多