Core data CoreData:仅获取最后的元素,而不是全部(iPhone)

Core data CoreData:仅获取最后的元素,而不是全部(iPhone),core-data,Core Data,欢迎光临 我使用核心数据来存储数据。我需要这样一个只返回实体最后7个元素的方法。我的问题是我应该如何修改这段代码(它获取所有元素,但我只需要最后7个) 最后定义?核心数据内部没有秩序的概念。如果您指的是基于距离的最远距离属性,则可以执行以下操作: NSEntityDescription *entity = [NSEntityDescription entityForName:@"Trip" inManagedObjectContext:managedObjectContext]; NSFetch

欢迎光临

我使用核心数据来存储数据。我需要这样一个只返回实体最后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];  
[request setFetchLimit:7];
[sortDescriptor release];  
NSError *error;  
NSArray *tripArray = [managedObjectContext executeFetchRequest:request error:&error];
请注意,添加
-setFetchLimit:
将导致此请求仅返回7个结果。它将根据您的排序返回“first”7。因此,如果您想要最接近的,请反转排序的
升序部分:

-mutableCopy
在从
-executeFetchRequest:error:
返回的
NSArray
上调用
-mutableCopy
绝对没有意义。向该
NSArray
添加对象不会将其添加到核心数据,从该
NSArray
中删除对象不会将其从核心数据中删除。因此,它完全没有价值,只是浪费


你记得你在哪里看到的吗?我已经找了一段时间了。

嗯,非常感谢。如果你还没有7项呢?它引发了“NSInternalInconsistencyException”,原因:“致命错误:节信息的持久缓存与当前配置不匹配。您在未禁用缓存或使用+deleteCacheWithName的情况下非法变异了NSFetchedResultsController的获取请求、其谓词或其排序描述符:”我记不清了,但肯定是某种教程。我对CoreData完全是初学者。我所有的知识都来自谷歌和论坛,一些来自苹果开发中心的样本,当然还有API文档。听上去你好像在硬编码7,你应该看看有多少物品被退回。你能给我推荐一些书或任何有用的资料给高级CoreData编程吗?苹果的文档很不错,当然我也推荐我自己的书,作者是。我相信艾迪生·韦斯利也出版了一本书。虽然我没有读过这本书,但我确实了解作者,并期望它会很好。你应该考虑的其他资源是。这些都是比较通用的资源,但是有一些核心数据文章。学习核心数据时要克服的最大困难不是把它看作SQL的包装器。核心数据不是基于SQL的,它并不总是使用SQL,当它使用SQL时,SQL元素被隐藏得很深。核心数据是一个对象图持久化框架,与关系数据库几乎没有共同之处。
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];