在视图控制器之间传递数据 - Storyboards segues

Posted

技术标签:

【中文标题】在视图控制器之间传递数据 - Storyboards segues【英文标题】:Pass data between View Controllers - Storyboards segues 【发布时间】:2013-11-22 13:17:42 【问题描述】:

我不知道为什么,但它在我的项目中不起作用。我所做的与 100 万个教程中的完全一样。

我有 TableViewController 和 TableView,还有简单的 ViewController 了解详细信息。

我在 h 文件中详细声明了 ViewController:

@property (strong, nonatomic) NSString *testText;

那么,在@implementation下的m文件中:

@synthesize testText;

在带有列表的 TableViewController 中,我有:

    //declared above: UIViewController *ticketDetailViewController = [segue destinationViewController];

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSString *destinationTitle = [[ticketArray objectAtIndex:[indexPath row]] pkey];
    [ticketDetailViewController setTitle:destinationTitle];

一切都很好。标题是正确的,所以必须有联系。但是,现在我想传递其他数据......所以我做了 testText 属性,我想从 TableViewController 访问,但我不能:/

错误提示:在“UIViewController *”类型的对象上找不到属性“testText”

真正奇怪的是..在调试过程中,有testText(如下图所示):

虽然当我想实现它时..它没有找到:

有人知道发生了什么吗?

【问题讨论】:

【参考方案1】:

变化:

UIViewController *ticketDetailViewController = [segue destinationViewController];

到:

TicketDetailViewController *ticketDetailViewController = (TicketDetailViewController *)[segue destinationViewController];

以便编译器知道您正在使用什么类型的类(并且它可以找到/完成相应的属性)。

【讨论】:

【参考方案2】:

您需要将详细视图控制器声明为详细视图控制器,而不是 UIViewController。

ViewController *ticketDetailViewController = [segue destinationViewController];

代替

UIViewController *ticketDetailViewController = [segue destinationViewController];

另外,你应该用 copy 而不是 strong 声明你的 testText 属性。

@property (copy, nonatomic) NSString *testText;

【讨论】:

【参考方案3】:
//declared above: UIViewController *ticketDetailViewController = [segue destinationViewController];

你不想要 UIViewController 类的 ViewController,你想要 TicketDetailViewController 或者你已经命名了目标 ViewController 类。在那个类中,我假设你有一个名为 testText 的属性。

正确的声明应该是

 TicketDetailViewController *ticketDetailViewController = [segue destinationViewController];

其次,你不再需要这个了。编译器会自动执行此操作。

@synthesize testText;

【讨论】:

以上是关于在视图控制器之间传递数据 - Storyboards segues的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中的视图控制器之间传递数据

如何在视图控制器之间传递数据而不在 ios 中使用 segue?

在视图控制器之间传递 iOS 10 Segue 中的数据 [重复]

如何以编程方式在视图控制器之间传递数据?我想将我的UITextfield数据传递给另一个视图控制器[重复]

如何使用转场

如何在 segues 之间传递值