我有一个模型,我有一个名为“类别”的实体。此类别具有称为“产品”的一对多关系。如何设置获取请求以仅获取没有产品的类别实体?
答案 0 :(得分:1)
如果您对Category
进行查询,则会将产品元素作为错误加载。这是CoreData的默认行为。
相反,如果您使用- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys
,则可以在执行请求时加载(预取)产品。
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
是从Products
到Category
的反比关系,而currentCategory
是您拥有的类别。
答案 1 :(得分:0)
查看NSFetchRequest的文档
您可以设置'includeSubentities'和'returnsObjectsAsFaults'来限制使用您的模型(产品)从Core Data返回的数据