如何在没有多对多关系的情况下获取实体

时间:2013-01-22 12:06:39

标签: ios core-data nsfetchrequest

我有一个模型,我有一个名为“类别”的实体。此类别具有称为“产品”的一对多关系。如何设置获取请求以仅获取没有产品的类别实体?

2 个答案:

答案 0 :(得分:1)

如果您对Category进行查询,则会将产品元素作为错误加载。这是CoreData的默认行为。

相反,如果您使用- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys,则可以在执行请求时加载(预取)产品。

来自Core Data App

  

Faulting可减少应用程序消耗的内存量。一个   fault是占位符对象,表示托管对象   还没有完全实现,或一个集合对象   表示关系

     

托管对象错误是相应类的实例,但是   它的持久变量尚未初始化。关系错误   是集合类的子类,表示   关系。错误允许核心数据在边界上设置边界   对象图。由于未实现故障,因此管理对象发生故障   消耗较少的内存,而不是与故障相关的管理对象   需要在记忆中表现出来。

  

预取实际上是一个特例   批处理错误,在另一次提取后立即执行。这个想法   预取后面是对未来需求的预期。当你   取一些物品,有时候你会知道很快就会知道   需要可能由故障表示的相关对象。避免   个别故障射击效率低下,你可以预先获取   目的地的物体

修改

如果您需要计算特定类别的产品数量,请使用- (NSUInteger)countForFetchRequest:(NSFetchRequest *)request error:(NSError **)error使用如下请求:

NSFetchRequest* request = // set up a request for Products
[request setPredicate:[NSPredicate predicateWithFormat:@"toCategory == %@", currentCategory]];
// count for fetch request here...

其中toCategory是从ProductsCategory的反比关系,而currentCategory是您拥有的类别。

答案 1 :(得分:0)

查看NSFetchRequest的文档

您可以设置'includeSubentities'和'returnsObjectsAsFaults'来限制使用您的模型(产品)从Core Data返回的数据

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSFetchRequest_Class/NSFetchRequest.html