ios - 为什么我的变量在我的 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"
但是我的标签没有设置...有人可以帮我解决这个问题吗?
先感谢您。
解决方案
编辑:
调试问题有3个部分:
是否调用
instantiateViewController(withIdentifier:)
返回 viewController?正如@aheze 指出的那样,您传递的是EndConfiguration
. 除非那是一个let EndConfiguration = "EndConfiguration"
看起来很奇怪的字符串常量(例如 )。由于您试图将返回的对象强制转换为类型EndConfiguration
,因此很明显有些事情是不对的。(EndConfiguration
不能既是视图控制器类又是字符串常量。)
要调试对您的调用,instantiateViewController(withIdentifier:)
您应该摆脱强制转换(as? EndConfiguration
位)并查看调用是否返回视图控制器。第二部分是条件转换(
as? EndConfiguration
位)。如果创建的不是EndConfiguration
将失败的类的视图控制器。很容易意外地将视图控制器的类保留为默认类UIViewController
,而不是将其更改为界面生成器中的自定义类。要检查是否打开了故事板,请选择该视图控制器的场景,选择该场景中的视图控制器,然后在“身份检查器”中检查该类是您的EndConfiguration
类。正如 PaulW 在他的评论中指出的那样,视图控制器的视图在调用返回时并未加载
instantiateViewController(withIdentifier:)
,因此您的代码step2.nameLabelOutlet?.text = "Jonh"
将不起作用,因为 nameLabelOutlet 将为 nil。另外,您不应该操纵另一个视图控制器的视图。把它们当作私人的。您应该将字符串属性添加到 IT 在 viewWillAppear 中选取的目标视图控制器,并酌情安装在其视图中。
推荐阅读
- amazon-web-services - 如何更改 AWS Cloudwatch Event Cron 表达式中的时区?
- c# - 表情符号字符串连接
- azure-devops - Check out specific Azure Repository which receives latest commit along with Self-repo checkout
- wordpress - wordpress 显示某些管理员的用户
- azure - 您的 Azure 凭据尚未设置或已过期,请运行 Connect-AzAccount 以设置您的 Azure 凭据
- json - 使用 Excel VBA 访问 Zendesk Web API(并在其中进行身份验证)
- reactjs - 获取数据后,Redux 数据未在 UI 中更新
- apache-kafka - Apache Kafka,来自新消费者组的消费者无法加入现有集群并消费消息
- javascript - 在 Electron 上,我无法评估脚本标签
- math - (可微分图像采样)自定义整数采样内核,空间变换器网络