如何访问Core Data父对象的关系名称?

时间:2011-03-21 10:53:28

标签: cocoa-touch core-data

我有一个简单的Core Data iPhone应用程序,其中父母与孩子有一对多的关系。在第一个视图中,您将看到父母列表;点击一个提供相应的儿童列表。在子视图中,我希望每个单元格显示子名称,然后将父名称显示为副标题。我使用了以下命令:

cell.detailTextLabel.text = [[managedObject valueForKey:@"Parent"] description];

但不是获取父名称,副标题显示如下:

<Parent: 0x4d5a520> (entity: Parent; id...

显然我正在打印出实际的关系,而不是对象的名字。如何显示实际的父母姓名(“Mr Smith”)?

感谢。

2 个答案:

答案 0 :(得分:2)

我设法解决了!我逐渐掌握了这个编程的东西......: - )

我会在这里留下答案,以防其他人有一天搜索它......

我没有使用带有KVC的通用NSManagedObjectContext,而是使用了我自己的子类:

Child *child = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [child.name description];
cell.detailTextLabel.text = [child.parent.name description];

答案 1 :(得分:1)

你的基本问题是description是NSObject的一种方法,它返回一个对程序员有用的描述。如果您有一个名为description的属性,那么它将与内置描述方法发生冲突。您可能会感到困惑,因为当您在NSString上调用描述时,您会获得字符串,但如果您调用任何其他类,则不会获得文字数据,例如当您在托管对象上调用描述时,您将获得对象UUID,无论是否是错误,它的属性以及与之相关的对象。除了调试之外,所有这些都是无用的。

永远不要将description用作属性名称,永远不要使用description返回用户所看到的任何内容。

如果您有如上所述的Child个对象的表视图,那么您获取的结果控制器将返回配置为Child实体的托管对象。要访问您将使用的相关Parent对象的名称:

cell.detailTextLabel.text = [[childMo valueForKey:@"parent"] valueForKey:@"name"];

当然,如果relationship或parent.name属性是可选的,那么在尝试使用该值之前,应首先检查是否有值。