在不同的视图控制器之间传递数据
我想从我的loginView控制器(ViewController
)到SecondViewController
获取用户名(txtUsername
),以便打印消息“欢迎用户名”。我使用视图控制器之间的Segue(login_success
)。在我的SecondViewController
中,我有NSString
(stringUsername
)来存储我的FirstViewController
的用户名。这是我在SecondViewController
代码:在不同的视图控制器之间传递数据
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
NSString *segueIdentifier = [segue identifier];
if ([segueIdentifier isEqualToString:@"login_success"]) {
ViewController *homeController = (ViewController *)[segue destinationViewController];
homeController.txtUsername.text = _stringUsername;
}
}
当我设置断点它使输出为 “自我的印刷说明 - > _ stringUsername: (NSObject的)的NSObject =”
一对夫妇的意见:
-
你说:
我想要得到的用户名(
txtUsername
),从我loginView控制器(ViewController
)到SecondViewController
...在这种情况下,你的
prepareForSegue
应在源视图控制器,而不是目标视图控制器。而segue.destinationViewController
将是SecondViewController
,而不是ViewController
。坦率地说,我在上面引用的你的意图与你的代码片段(这看起来像你试图从
SecondViewController
到ViewController
执行segue)一致时遇到了问题。 -
更新目标视图控制器时,不应尝试设置
IBOutlet
的text
属性。prepareForSegue
根本不应该尝试使用IBOutlet
引用,因为当调用prepareForSegue
时,目标的视图尚未实例化,并且所有IBOutlet
引用可能都是nil
。而是,源视图控制器中的
prepareForSegue
应该只在目标控制器中设置NSString
属性。在NSString
属性的基础上填充IBOutlet
的text
属性的责任落在目标视图控制器中的viewDidLoad
。
非常感谢你抢走你的时间来纠正我,因为我是新来的。我有更多的困惑,但我会试图弄明白这是学习的方式。再次感谢。 – Christine 2014-10-07 22:14:12