iOS将数据从表格单元格传递到新视图控制器

时间:2014-05-23 05:13:56

标签: ios objective-c uitableview segue

我有一个自定义的表格单元格,每个表格单元格都有一个指向自己的联系对象的指针。我想将该指针传递给另一个视图控制器以显示更多细节。我在表格单元格中创建了我的segue到界面构建器中的视图控制器。我无法通过我的价值,这是我的prepareForSegue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"contactDetailSegue"]) {
        ContactDetailViewController *destination = segue.destinationViewController;
        Contact *contactToSend = (ContactTableViewCell *)sender.contact;
        destination.contact = contactToSend;
    }
}

我的问题是我不太了解发送者在函数中的作用,我相信如果我按照我的方式使用接口构建器,那么发送者将是所选的表格单元格。我是否应该接受我的联系人指针并将其传递到目的地?我目前有一个" Property' contact'没有找到类型' __强ID'"

的对象

感谢

2 个答案:

答案 0 :(得分:1)

id是任何类型的对象。这意味着编译器不会让你在其上运行特定类的方法。通过使用断点找出它在运行时的真正含义。它可能是您的一个表格视图单元格,但它可能是其他内容,具体取决于您如何连接它。将发送者强制转换为特定的类,以便编译器知道可以在其上调用哪些方法。

答案 1 :(得分:0)

这将解决我的问题

 Contact *contactToSend = [(ContactTableViewCell *)sender contact];

id是通用数据类型。编译器未在类型为id的对象contact中找到sender的属性。所以给出错误。但您可以在id类型对象上发送任何消息[sender contact]。 ObjectiveC是动态语言contact消息将在运行时发送给实际对象。因此,如果发件人在运行时[sender contact],则ContactTableViewCell代码将起作用。您收到错误是因为您的类型转换不正确。阿玛尔提到了正确的一个

((ContactTableViewCell *)sender).contact