我有一个自定义的表格单元格,每个表格单元格都有一个指向自己的联系对象的指针。我想将该指针传递给另一个视图控制器以显示更多细节。我在表格单元格中创建了我的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'"
的对象感谢
答案 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