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

时间:2014-10-07 21:22:44

标签: ios objective-c uiviewcontroller uistoryboardsegue

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

答案 0 :(得分:1)

有几点意见:

  1. 你说:

      

    我想从我的loginView控制器(txtUsername)获取用户名{ViewController)到SecondViewController ...

    在这种情况下,您的prepareForSegue应该位于源视图控制器中,而不是目标视图控制器中。 segue.destinationViewControllerSecondViewController,而不是ViewController

    坦率地说,我无法将您上面引用的意图与您的代码段(看起来您试图从SecondViewControllerViewController进行调整)进行协调。< / p>

  2. 更新目标视图控制器时,不应尝试设置text的{​​{1}}属性。 IBOutlet根本不应尝试使用prepareForSegue引用,因为在调用IBOutlet时,目标的视图尚未实例化且所有prepareForSegue引用可能是IBOutlet

    相反,源视图控制器中的nil应该只在目标控制器中设置prepareForSegue属性。在NSString属性的基础上填充text IBOutlet属性的责任落在目标视图控制器中NSString