从另一个视图控制器快速重新加载表视图时发现Nil错误

时间:2019-02-07 10:06:52

标签: ios swift uitableview

我在从另一个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

有人能看到为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

您已经创建了CalendarTableViewController并立即尝试访问此CalendarTableViewController中的子视图。但是方法loadViews()和viewDidLoad()尚未调用,所有子视图都为零。我建议您在文档https://developer.apple.com/reference/uikit/uiviewcontroller

中阅读有关UIViewController生命周期的信息。

答案 1 :(得分:0)

我终于了解了我的错误原因。我正在为容器视图中包含的CalendarTableVIew使用自定义类。因此,我完全摆脱了容器视图,只放置了一个TableView并有一个引用它的出口。 选择自定义类的最初选择是,我不仅将WorkshopBookingsViewController子类化为UITableViewDelegateUITableViewDataSource,而且还子集化为UITableView。因此,错误完全误导了我选择将CalendarTableVIew嵌入到容器中,但没有必要,因为我还将拥有一个集合视图,我也将WorkshopBookingsViewController子类化为UICollectionViewDelegate和{{1} }。 多亏了您的帮助,我才能看到我要去哪里了。像往常一样非常感谢,成为这个社区的一员真是太好了。