首页 > 解决方案 > 为什么我的变量在我的 iOS 应用程序中转换为空?

问题描述

嗨, 我正在为 IOS 编写一个 Xcode 上的应用程序,我想将一个变量发送到另一个 ViewController。问题是,当我想从名为"Step1"的控制器发送来设置我的第二个视图控制器的标签时,名为"Step2"。为此,我在“步骤 1”中以这种方式进行:

guard let step2 = self.storyboard?.instantiateViewController(withIdentifier: Step2) as? EndConfiguration else
        {
            fatalError("Error when trying to get the reference to the Step 2")
        }

step2.nameLabelOutlet?.text = "Jonh"

但是我的标签没有设置...有人可以帮我解决这个问题吗?

先感谢您。

标签: iosswiftiphonexcodeipad

解决方案


编辑:

调试问题有3个部分:

  1. 是否调用instantiateViewController(withIdentifier:)返回 viewController?正如@aheze 指出的那样,您传递的是EndConfiguration. 除非那是一个let EndConfiguration = "EndConfiguration"看起来很奇怪的字符串常量(例如 )。由于您试图将返回的对象强制转换为类型EndConfiguration,因此很明显有些事情是不对的。(EndConfiguration不能既是视图控制器类又是字符串常量。)

    要调试对您的调用,instantiateViewController(withIdentifier:)您应该摆脱强制转换(as? EndConfiguration位)并查看调用是否返回视图控制器。

  2. 第二部分是条件转换(as? EndConfiguration位)。如果创建的不是EndConfiguration将失败的类的视图控制器。很容易意外地将视图控制器的类保留为默认类UIViewController,而不是将其更改为界面生成器中的自定义类。要检查是否打开了故事板,请选择该视图控制器的场景,选择该场景中的视图控制器,然后在“身份检查器”中检查该类是您的EndConfiguration类。

  3. 正如 PaulW 在他的评论中指出的那样,视图控制器的视图在调用返回时并未加载instantiateViewController(withIdentifier:),因此您的代码step2.nameLabelOutlet?.text = "Jonh"将不起作用,因为 nameLabelOutlet 将为 nil。另外,您不应该操纵另一个视图控制器的视图。把它们当作私人的。您应该将字符串属性添加到 IT 在 vi​​ewWillAppear 中选取的目标视图控制器,并酌情安装在其视图中。


推荐阅读