获取核心数据中一对多关系的计数

Posted

技术标签:

【中文标题】获取核心数据中一对多关系的计数【英文标题】:Getting the count of a to-many relationship in core data 【发布时间】:2010-12-10 03:39:08 【问题描述】:

我有一个包含父实体和子实体的数据模型。子实体与父实体具有一对多反向关系(一个子实体可以有多个父实体)。我目前正在尝试获取特定孩子的父母人数:

Parent *doomedParent = [self.fetchedResultsController objectAtIndexPath:indexPath];

Child *child = [doomedParent valueForKey:@"child"];
int parentCount = [[child valueForKey:@"parents.@count"] intValue];

当试图从孩子那里获取父母(父母关系)计数时,我收到以下错误:

'由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[valueForUndefinedKey:]:实体Child不符合键“parents.@count”的键值编码。'

有什么想法我可能做错了吗?

【问题讨论】:

您确定“parents.@count”是一个键。变量 intValue 的值是多少? @euphoria83, "parents.@count" 在 Cocoa 中被称为关键路径。 intValue 是发送到valueForKey:(原文如此)消息发送到child 的结果的消息(不是变量)。 【参考方案1】:

您应该使用-valueForKeyPath:,而不是-valueForKey:,它不遵循键路径(-valueForKey: 因此对于单键查找更快)。这应该有效:

int parentCount = [[child valueForKeyPath:@"parents.@count"] intValue];

【讨论】:

伙计,我知道这一定很简单。谢谢!【参考方案2】:

虽然 Barry Wark 的回答对于使用 KVC 是正确的,但有什么理由你不只是得到 .parents NSSet 的计数,像这样:

NSUInteger parentCount = [child.parents count];

KVC 非常棒,但除非我遗漏了什么,否则在这种情况下是不是有点矫枉过正?

【讨论】:

以上是关于获取核心数据中一对多关系的计数的主要内容,如果未能解决你的问题,请参考以下文章

如何在一对多核心数据关系中获取特定数据?

一对多关系核心数据:在prepareForSegue中获取:

一对多关系核心数据获取数据

IOS:通过一对多关系获取核心数据

核心数据 - 以一对多关系访问实例与获取请求?

获取核心数据对象,其中一对多关系包含集合中的所有对象