在View Controllers - Storyboards segues之间传递数据

时间:2013-11-22 13:17:42

标签: ios objective-c xcode ios7 xcode5

我不知道为什么,但它在我的项目中不起作用。我和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(如下面的屏幕所示):

enter image description here

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

enter image description here

任何人都知道发生了什么事?

3 个答案:

答案 0 :(得分:2)

变化:

UIViewController *ticketDetailViewController = [segue destinationViewController];

为:

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

这样编译器就知道你正在使用什么类型的类(它可以找到/完成相应的属性)。

答案 1 :(得分:2)

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

ViewController *ticketDetailViewController = [segue destinationViewController];

而不是

UIViewController *ticketDetailViewController = [segue destinationViewController];

此外,您应该使用copy而不是strong来声明testText属性。

@property (copy, nonatomic) NSString *testText;

答案 2 :(得分:1)

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

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

正确的声明应该是

 TicketDetailViewController *ticketDetailViewController = [segue destinationViewController];

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

@synthesize testText;