【发布时间】:2016-10-20 07:16:02
【问题描述】:
我有一个简单的应用程序。将用户信息从一个视图控制器传递到另一个视图控制器的表视图。它成功打印出我的用户对象,我可以在控制台中看到数据,但是当我将对象中的数据提取到我的视图中时,它不会显示
@IBOutlet weak var chatPartnerLabel: UILabel!
var user: User? {
didSet {
print(user) //This prints out all information fine
chatPartnerLabel.text = user?.firstName //This crashes the app because chatPartnerLabel.text is nil
}
}
override func viewDidLoad() {
super.viewDidLoad()
chatPartnerLabel.text = user?.firstName //This comes up as nil
}
我也尝试过对标签进行硬编码,看看它是否正常工作
chatPartnerLabel.text = "My text" //Changes the label to My Text
我也尝试将user?.firstName 放入 viewDidAppear 和 viewWillAppear 都显示一个空标签。
正如您在控制台中看到的那样,我的用户在那里有数据。我在尝试设置时遇到的崩溃是 nil
我在成功将我的 chatPartnerLabel 更改为姓名或名字时做错了什么?
【问题讨论】:
-
检查您的 IBOutlet 与情节提要的连接
-
在此处写入崩溃日志
-
@ÖzgürErsil IBConnection 很好,因为我可以编写文本并且它更新正确,但不是我的用户。
-
@Vyacheslav 当应用程序崩溃时显示“错误展开可选 NIL”,我假设这是因为我试图过早设置文本?
-
如果您正在执行
segue并使用prepareForSegue将数据传递给destinationViewController。您必须删除didSet属性观察者,因为当时chatPartnerLabel没有加载并链接到插座。您必须改为在viewDidLoad中分配标签。