我有一个主视图,它有一个名为timeLabel的标签和一个调用弹出视图的按钮。
在弹出视图中,我可以选择一个时间(小时和分钟),当我选择时,我希望标签文本立即更改为所选小时(标签具有初始值:“22:00”)。
我尝试做的是在主视图中创建一个更改标签文本的函数:
func setNotiTimeHour(hour: Int)
var time = self.notiTimeLabel.text!.componentsSeparatedByString(":") //ERROR
var newTime = String(hour) + ":" + time[1]
self.notiTimeLabel.text = newTime
}
func setNotiTimeMin(min: Int) {
var time = self.notiTimeLabel.text!.componentsSeparatedByString(":") //ERROR
var newTime = time[0] + ":" + String(min)
self.notiTimeLabel.text = newTime
}
然后当小时或分钟发生这样的变化时,我试着调用这些函数:
SettingsTableViewController().setNotiTimeHour(Int(hours))
SettingsTableViewController().setNotiTimeHour(Int(minutes))
当我像这样调用函数时,我收到一条错误消息:“致命错误:在展开Optional值时意外发现nil”
我认为这意味着标签没有价值。
为什么我会收到此错误,是否有其他方法可以更改标签的文字?
答案 0 :(得分:1)
SettingsTableViewController()
创建一个新的视图控制器。它不使用您已有的实例。这就是标签为nil
的原因。
您需要将popover控制器提交给现有视图控制器,将其保存在属性中,然后调用该控制器。您可能希望为此创建委托协议,以便可以从SettingsTableViewController
以外的其他视图控制器显示此popover类。