0

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

4

2 回答 2

1

如果您查询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的反比关系在哪里,并且是您拥有的类别。ProductsCategorycurrentCategory

于 2013-01-22T12:40:01.833 回答
0

查看 NSFetchRequest 的文档

您可以设置“includeSubentities”和“returnsObjectsAsFaults”来限制从核心数据返回的数据与您的模型(产品)

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

于 2013-01-22T12:37:28.557 回答