在不同的视图控制器之间传递数据

问题描述:

我想从我的loginView控制器(ViewController)到SecondViewController获取用户名(txtUsername),以便打印消息“欢迎用户名”。我使用视图控制器之间的Segue(login_success)。在我的SecondViewController中,我有NSStringstringUsername)来存储我的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 =”

一对夫妇的意见:

  1. 你说:

    我想要得到的用户名(txtUsername),从我loginView控制器(ViewController)到SecondViewController ...

    在这种情况下,你的prepareForSegue应在源视图控制器,而不是目标视图控制器。而segue.destinationViewController将是SecondViewController,而不是ViewController

    坦率地说,我在上面引用的你的意图与你的代码片段(这看起来像你试图从SecondViewControllerViewController执行segue)一致时遇到了问题。

  2. 更新目标视图控制器时,不应尝试设置IBOutlettext属性。 prepareForSegue根本不应该尝试使用IBOutlet引用,因为当调用prepareForSegue时,目标的视图尚未实例化,并且所有IBOutlet引用可能都是nil

    而是,源视图控制器中的prepareForSegue应该只在目标控制器中设置NSString属性。在NSString属性的基础上填充IBOutlettext属性的责任落在目标视图控制器中的viewDidLoad

+1

非常感谢你抢走你的时间来纠正我,因为我是新来的。我有更多的困惑,但我会试图弄明白这是学习的方式。再次感谢。 – Christine 2014-10-07 22:14:12