【问题标题】:Why are my variables empty when I cast them in my iOS application?为什么我的变量在我的 iOS 应用程序中转换为空?
【发布时间】:2021-03-23 03:56:43
【问题描述】:

嗨, 我在 Xcode 上为 IOS 编写一个应用程序,我想将一个变量发送到另一个 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"

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

提前谢谢你。

【问题讨论】:

  • 应该是instantiateViewController(withIdentifier: "EndConfiguration")
  • 抱歉,我修改了代码以使您更容易理解。
  • 什么不起作用?
  • iBOutlets 在视图加载之前不会设置。在呈现视图控制器或引用 view 或调用 loadViewIfNeeded 之前,不会加载视图。但是,从拥有的视图控制器外部直接引用 UI 元素是一种糟糕的形式。我建议您将文本分配给目标视图控制器中的新字符串属性,然后将该字符串分配给您的标签,例如viewDidLoad' or viewWillAppear`
  • @Paulw11 很好地抓住了试图从新实例化的视图控制器访问 IBOutlet 的代码。我错过了那部分。

标签: ios swift iphone xcode ipad


【解决方案1】:

已编辑:

调试问题分为三个部分:

  1. instantiateViewController(withIdentifier:) 的调用是否返回视图控制器?正如@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 会在 viewWillAppear 中获取该属性并酌情安装在其视图中。

【讨论】:

  • 非常感谢您的回答,1) 我这样做了:ibb.co/6PbhkZ9 所以打印名为“Step2”的变量,它返回:“”。在我的故事板中,我有一个带有标识符“Step1”的视图控制器和一个以相同方式命名的可可触摸类。 2) 这对我来说听起来不错:ibb.co/PQyH6pM 3) 这实际上是有道理的,所以我在第 1 步:ibb.co/xDNCXYQ 和第 2 步:ibb.co/x7RZSm9 再次感谢您的帮助
  • 如果我的回答解决了你的问题,那么你应该接受它。 (很难按照你的一系列微小的sn-ps代码截图。)
  • 不,不幸的是,这没有解决。我重新创建了一个空项目,只是我的错误,如果你有时间,我将不胜感激。 mega.nz/folder/ZnxQ1DwK#3VQ8dTuQk58EOP-ztE9NYg
猜你喜欢
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多