欢迎
我使用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];
答案 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中删除。因此它绝对没有价值,只是浪费。
你还记得你在哪里看过吗?我一直试图追踪它一段时间。