Ios 当插座连接正确时,可选展开失败

Ios 当插座连接正确时,可选展开失败,ios,swift,null,optional,unwrap,Ios,Swift,Null,Optional,Unwrap,我正在开发一个简单的应用程序,用户可以登录并从网上阅读文章。我最近添加了一个代码,在处理segue时在第二个视图中设置标题,但不幸的是,我在第二个页面上的标题为零。我有一个故事板中的对象正确连接到视图控制器中的变量,我检查了两次。我不知道该怎么办,也许我打开了一些不合适的东西 代码: 在第一种情况下会出现异常,在这种情况下,我试图为next.titleLabel.text赋值。它说标题标签是nil,但实际上不是 SectionViewController: import UIKit class

我正在开发一个简单的应用程序,用户可以登录并从网上阅读文章。我最近添加了一个代码,在处理segue时在第二个视图中设置标题,但不幸的是,我在第二个页面上的标题为零。我有一个故事板中的对象正确连接到视图控制器中的变量,我检查了两次。我不知道该怎么办,也许我打开了一些不合适的东西

代码:

在第一种情况下会出现异常,在这种情况下,我试图为
next.titleLabel.text
赋值。它说
标题标签
是nil,但实际上不是

SectionViewController:

import UIKit

class SectionViewController: UIViewController {
    @IBOutlet var titleLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

我很确定这是由类型转换引起的,但是如果segue甚至不知道下一个视图将具有什么类型,那么如何正确设置属性呢?

我可以看到您正在尝试做什么,但恐怕iOS不允许您这样做。在
prepareforsgue()
方法中,您试图通过直接设置文本值来修改正在创建的视图控制器

iOS lazy尽可能多地加载,这意味着在程序的这一点上,标签实际上还没有被创建–它实际上是
nil
。如果在该行上放置断点,您应该能够在调试器窗口中运行
ponext.titleLabel
,以查看
nil
返回。如果您先运行
po next.view
,它将强制iOS创建视图及其所有子视图,此时再次运行
po next.titleLabel
将按您的预期工作

如果您尝试在Xcode中创建模板主控细节应用程序项目,您将看到正确的解决方案:在新的视图控制器中设置一个属性,然后将该值传输到
viewdiload()
中的标签


摘要:当您从视图控制器A导航到视图控制器B时,不要尝试配置B的UI。相反,将所需的值发送给B,并让B自行配置。

您是说我应该将其传递给该类的另一个属性,而不是UI元素?是的。您可以指定所有想要的属性,但不能指定UI元素。(这只是99%的事实,但我不会告诉你例外,因为这是一个肮脏的、肮脏的黑客!:)所以谢谢,我从没想过斯威夫特会那么懒:)
import UIKit

class SectionViewController: UIViewController {
    @IBOutlet var titleLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}