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