我有一个模型,其中有一个名为“类别”的实体。此类别具有称为“产品”的一对多关系。如何设置获取请求以仅获取没有产品的类别实体?
2 回答
如果您查询Category
,产品元素将作为故障加载。这是 CoreData 的默认行为。
相反,如果您使用,您可以在执行请求时- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys
加载(预取)产品。
故障减少了应用程序消耗的内存量。故障是表示尚未完全实现的托管对象的占位符对象,或表示关系的集合对象:
托管对象故障是适当类的实例,但其持久变量尚未初始化。关系故障是表示关系的集合类的子类。故障允许 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”来限制从核心数据返回的数据与您的模型(产品)