我有一个简单的Core Data iPhone应用程序,其中父母与孩子有一对多的关系。在第一个视图中,您将看到父母列表;点击一个提供相应的儿童列表。在子视图中,我希望每个单元格显示子名称,然后将父名称显示为副标题。我使用了以下命令:
cell.detailTextLabel.text = [[managedObject valueForKey:@"Parent"] description];
但不是获取父名称,副标题显示如下:
<Parent: 0x4d5a520> (entity: Parent; id...
显然我正在打印出实际的关系,而不是对象的名字。如何显示实际的父母姓名(“Mr Smith”)?
感谢。
答案 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属性是可选的,那么在尝试使用该值之前,应首先检查是否有值。