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

Ios 如何在没有多对多关系的情况下获取实体,ios,core-data,nsfetchrequest,Ios,Core Data,Nsfetchrequest,我有一个模型,其中有一个名为“Category”的实体。该类别具有一对多关系,称为“产品”。如何设置fetch请求以仅获取类别实体而不获取产品?查看NSFetchRequest的文档 您可以设置“includeSubentities”和“returnsObjectsAsFaults”,以限制从模型(产品)的核心数据返回的数据 如果查询类别,则产品元素将作为故障加载。这是CoreData的默认行为 相反,如果使用-(void)setRelationshipKeyPaths预取:(NSArray*)

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

查看NSFetchRequest的文档

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


如果查询
类别
,则产品元素将作为故障加载。这是CoreData的默认行为

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

出错会减少应用程序所消耗的内存量。A. fault是一个占位符对象,表示 尚未完全实现,或收集对象 表示一种关系

托管对象错误是相应类的实例,但 它的持久变量尚未初始化。感情上的过失 是集合类的子类,表示 关系断层使岩芯数据能够将边界置于 对象图。由于未实现故障,因此将发生托管对象故障 占用更少的内存,并且与故障相关的托管对象不可用 需要在内存中表示

预取实际上是 批处理错误,在另一次提取后立即执行。想法 预取的背后是对未来需求的预期。当你 拿一些东西,有时候你知道,不久之后你也会 需要可能由故障表示的相关对象。避开 单个故障触发效率低下,您可以预取 目标位置的对象

编辑

如果需要计算特定类别的产品数量,请使用以下请求使用
-(NSUInteger)countForFetchRequest:(NSFetchRequest*)请求错误:(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
是您拥有的类别。

好的。。。只是为了澄清,这意味着如果我检查我类别中的产品数量,它会显示相关产品的实际数量,但这些产品不会消耗任何内存,因为它们尚未实例化?!只要我想访问一个产品,Core Data就会从持久存储中动态检索它?@ASP是的,但您应该注意故障。如果您访问任何类别的属性,那么它将触发一个错误(核心数据将往返并为您检索数据)。我添加了一个编辑。