获取从核心数据对象与10个日期最快
问题描述:
我在我的CoreData数据库中具有类型的NSDate的“日期”的属性的对象。我怎样才能用最快的日期获取对象?获取从核心数据对象与10个日期最快
这是我到目前为止有:
NSFetchRequest *fetchRequest = [NSFetchRequest new];
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([MyManagedObject class]) inManagedObjectContext:self.database.managedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
NSArray *result = [self.database.managedObjectContext executeFetchRequest: fetchRequest error: nil];
我相信这会给我所有的管理对象早在有序的,但我真的只需要10分最新的。我怎样才能做到这一点?使用NSFetchRequest
而不是将它们全部提取出来然后用编程方式对它们进行排序会更快吗?
答
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
...
NSArray* tenSoonestElements = [result subarrayWithRange:NSMakeRange(0, 10)];
+0
这是否比限制我像上面提到的Seamus获取的数量好? – 2013-04-09 22:09:27
+0
简介和测试。我不确定它会有多大的不同,因为请求仍然需要将所有记录正确排序。但分析将确认这是否属实。 – 2013-04-09 22:10:33
答
排序在decending为了记录和美国fetchLimit
只得到最近的结果:
NSFetchRequest *fetchRequest = [NSFetchRequest new];
fetchRequest.entity = [NSEntityDescription entityForName:NSStringFromClass([MyManagedObject class])
inManagedObjectContext:self.database.managedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date"
ascending:NO];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
[fetchRequest setFetchLimit:10];
NSArray *result = [self.database.managedObjectContext executeFetchRequest:fetchRequest
error:nil];
添加fetchRequest.fetchLimit = 10,你会得到最大的10个实体的这一请求。 – sanjaymathad 2014-01-17 11:18:03