【发布时间】:2013-01-22 12:06:38
【问题描述】:
我有一个模型,其中有一个名为“类别”的实体。此类别具有称为“产品”的一对多关系。如何设置获取请求以仅获取没有产品的类别实体?
【问题讨论】:
标签: ios core-data nsfetchrequest
我有一个模型,其中有一个名为“类别”的实体。此类别具有称为“产品”的一对多关系。如何设置获取请求以仅获取没有产品的类别实体?
【问题讨论】:
标签: ios core-data nsfetchrequest
如果您查询Category,产品元素将作为故障加载。这是 CoreData 的默认行为。
相反,如果你使用- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys,你可以在请求执行时加载(pre-fetch)产品。
故障会减少您的应用程序消耗的内存量。一种 fault 是一个占位符对象,代表一个托管对象 尚未完全实现,或集合对象 表示关系:
托管对象错误是适当类的实例,但是 它的持久变量尚未初始化。关系故障 是集合类的子类,表示 关系。故障允许 Core Data 在 对象图。因为一个故障没有实现,一个托管对象故障 消耗更少的内存,并且与故障相关的托管对象不是 完全需要在内存中表示。
和
预取实际上是 批处理故障,在另一次提取后立即执行。这个想法 预取的背后是对未来需求的预期。当你 获取一些对象,有时你知道不久之后你也会 需要可能由故障表示的相关对象。为了避免 个别故障触发效率低下,您可以预取 目的地的对象。
编辑
如果您需要计算特定类别的产品数量,请使用- (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 是从Products 到Category 的反比关系,currentCategory 是您拥有的类别。
【讨论】:
查看 NSFetchRequest 的文档
您可以设置“includeSubentities”和“returnsObjectsAsFaults”,以限制您的模型(产品)从核心数据返回的数据
【讨论】: