我在从另一个vc更新tableview时遇到麻烦。
最初,我以CalendarTableViewController
的形式声明它:
func reloadData() {
print("days array in tableview is: \(WorkshopBookingsViewController.daysArray)")
calendarTableView.reloadData()
// tableView.reloadData()
}
它从WorkshopBookingsViewController
被调用,就像:
func newDate() {
let calendar = Calendar.current
let currentDate = self.dateToDisplay!
let components = (calendar as NSCalendar).components([.year, .month, .day, .weekday, .hour, .minute] , from: currentDate)
self.displayedMonth = components.month!
self.monthCounter = self.displayedMonth - 1
print("mounthCounter is:\(self.monthCounter)")
//get days in courrent month ansd append it to daysArray to populate TableView
let daysRange = calendar.range(of: .day, in: .month, for: currentDate)!
WorkshopBookingsViewController.daysArray.removeAll()
for day in 1...daysRange.count {
WorkshopBookingsViewController.daysArray.append(String(day))
}
print(WorkshopBookingsViewController.daysArray)
self.actualMonthLabel.text = self.monthsArray[self.monthCounter]
let tableView = CalendarTableViewController()
// let tableView:CalendarTableViewController!
tableView.reloadData()
}
在函数定义中,我得到了Found Nil错误。
我试图从 reload tableView from Another ViewController Swift 4.2
从注释行中可以看到
// let tableView:CalendarTableViewController!
但是它使我想到另一个错误:
Constant 'tableView' used before being initialized
。
有人能看到为什么会这样吗?
答案 0 :(得分:0)
您已经创建了CalendarTableViewController并立即尝试访问此CalendarTableViewController中的子视图。但是方法loadViews()和viewDidLoad()尚未调用,所有子视图都为零。我建议您在文档https://developer.apple.com/reference/uikit/uiviewcontroller
中阅读有关UIViewController生命周期的信息。答案 1 :(得分:0)
我终于了解了我的错误原因。我正在为容器视图中包含的CalendarTableVIew
使用自定义类。因此,我完全摆脱了容器视图,只放置了一个TableView并有一个引用它的出口。
选择自定义类的最初选择是,我不仅将WorkshopBookingsViewController
子类化为UITableViewDelegate
和UITableViewDataSource
,而且还子集化为UITableView
。因此,错误完全误导了我选择将CalendarTableVIew
嵌入到容器中,但没有必要,因为我还将拥有一个集合视图,我也将WorkshopBookingsViewController
子类化为UICollectionViewDelegate
和{{1} }。
多亏了您的帮助,我才能看到我要去哪里了。像往常一样非常感谢,成为这个社区的一员真是太好了。