繁体   English   中英

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

[英]iOS passing data from table cell to new view controller

我有一个自定义的表格单元,每个表格单元都有一个指向其自己的联系人对象的指针。 我想将该指针传递给另一个视图控制器以显示更多详细信息。 我从表单元格到界面生成器中的视图控制器创建了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;
    }
}

我的问题是我不太了解sender在函数中的作用,我相信如果我像以前那样使用接口构建器,那么sender将是所选的表格单元。 然后,我是否应该可以使用我的联系指针并将其传递到目的地? 我目前有一个“类型'__strong id'的对象上找不到属性'联系人'”

谢谢

id是任何类型的对象。 这意味着编译器不允许您在其上运行特定类的方法。 使用断点找出运行时的实际情况。 它可能是您的表格视图单元格之一,但也可能是其他内容,具体取决于您如何进行连接。 将发送方强制转换为实际的特定类,以便编译器知道可以在其上调用什么方法。

我想这将解决您的问题

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

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

((ContactTableViewCell *)sender).contact

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM