在prepareForSegue中传递参数:

时间:2015-10-13 16:30:29

标签: ios segue

summarise

我从我的“StartVC”中称之为segue。我有另一个CreateUserViewController,它包含不同的文本字段来保存用户详细信息。我不知道为什么这不起作用,有人可以开导我吗? 通过断点我可以看到代码运行,并且显示了创建用户vc,但是字段是空的(仅包含占位符;我不会将字符串写为空白= @“”或类似的东西)

1 个答案:

答案 0 :(得分:1)

您不应尝试更改其他视图控制器的视图对象。

违反了封装原则,这是面向对象设计的重要组成部分。 (这意味着代码的其他部分,在视图控制器之外,依赖于视图控制器的演示才能工作。如果您决定稍后移动视图,则必须更改视图控制器之外的代码。那很糟糕。)

这也是您的代码无法正常工作的原因。

相反,您应该在目标视图控制器中设置属性并设置它们。然后在目标视图控制器的viewDidLoad(仅调用一次)或viewWillAppear(每次VC即将显示时调用)中,将属性中的值安装到视图中。

当调用prepareForSegue时,目标视图控制器的视图尚未加载。如果你看它们,你会发现它们是零。这就是你的代码无效的原因。

试试这个测试:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"CreateUser"])
    {
       CreateUserViewController *createUserVC = segue.destinationViewController;
       NSLog(@"createUserVC.email = %@", createUserVC.email);
       NSLog(@"createUserVC.age = %@", createUserVC.age);
       NSLog(@"createUserVC.name = %@", createUserVC.name);
    }
}

你会发现所有这些网点都是零。