CoreData:只获取最后一个元素,而不是全部(iPhone)

时间:2010-08-13 10:19:34

标签: core-data

欢迎

我使用Core Data来存储数据。我需要这样一个方法,它只返回实体的最后7个元素。我的问题是我应该如何修改这个代码(它获取所有元素,但我只需要最后7个)

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Trip" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[ NSFetchRequest alloc] init];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:NO]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];  
[request setSortDescriptors:sortDescriptors];  
[sortDescriptor release];  
NSError *error;  
tripArray = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

1 个答案:

答案 0 :(得分:4)

定义最后?核心数据内部没有订单概念。如果您的意思是最远离您distance属性,那么您可以执行以下操作:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Trip" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[ NSFetchRequest alloc] init];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"distance" ascending:NO]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];  
[request setSortDescriptors:sortDescriptors];  
[request setFetchLimit:7];
[sortDescriptor release];  
NSError *error;  
NSArray *tripArray = [managedObjectContext executeFetchRequest:request error:&error];

请注意,添加-setFetchLimit:会导致此请求仅返回7个结果。它将根据您的排序返回“第一个”7。因此,如果您想要最接近,请反转您排序的ascending:部分。

-mutableCopy

-mutableCopy返回的NSArray上调用-executeFetchRequest: error:绝对没有意义。向NSArray添加对象不会将它们添加到Core Data,并从NSArray中删除它们也不会将它们从Core Data中删除。因此它绝对没有价值,只是浪费。

你还记得你在哪里看过吗?我一直试图追踪它一段时间。