所以我有一个带有tableView和detailView的splitViewController。我想要的是在detailView中有一个按钮,当按下该按钮时,要为tableView(masterview)中的条形按钮项增加两个星期的时间。我已经完成了所有的任务,但是每当我运行它时,都可以选择
这是在detailView中运行的segue
var textMC = MasterViewController()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if ((segue.destination as? UISplitViewController) != nil) {
textMC.sim()
}
然后在masterView中
func sim() {
let previousDate = dateLabel.title
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yy"
let previousDateFormated : Date? = dateFormatter.date(from: previousDate!)
let date = Calendar.current.date(byAdding: .day, value: 14, to: (previousDateFormated)! )
let stringDate = dateFormatter.string(from: date!)
dateLabel.title = stringDate
}
override func viewDidLoad() {
super.viewDidLoad()
let date = Date(timeIntervalSinceReferenceDate: 632880000)
let formatter = DateFormatter()
formatter.dateFormat = "MM/dd/yy"
let result = formatter.string(from: date)
dateLabel.title = result
update()
}
viewDidLoad函数确实使初始dateLabel.title为正确的日期,并且sim函数确实运行,但是其方法返回错误“引用dateLabel.title的意外发现nil,同时展开一个可选值”。我不明白为什么它为零以及如何解决此问题。是因为尽管我有一个dateLabel.title,但实际的dateLabel为零?请告诉我如何解决此问题。谢谢
答案 0 :(得分:0)
此行:
var textMC = MasterViewController()
错了。这将创建一个全新的MasterViewController()
实例,它完全没有视图内容。你永远都不要那样做。
相反,将当前视图控制器中的序列添加到情节提要中的MasterViewController
场景中,为其指定标识符,然后使用
performSegue(withIdentifier: "yourMasterVCIdentifierHere")
然后实现prepareForSegue这样的东西:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let dest = segue.destination as? MasterViewController {
textMC
}
}