在 viewDidLoad() 之前调用 UITableView 委托方法

UITableView delegate methods being called before viewDidLoad()

UIViewControllerviewDidLoad() 中,调用了一个方法来更新 class 变量。一旦我导航到另一个视图控制器并返回到这个视图控制器,UITableView 的委托方法首先在使用 class 变量的地方被调用。应用程序正在崩溃,因为该变量正在 viewDidLoad() 中构造。如何解决这个问题?谢谢。

有问题的 class 变量:

var showHideDict = Dictionary<Int, Bool>()

viewDidLoad():

override func viewWillAppear() {
    super.viewWillAppear()
    makeAPICall()
}

API调用方法:

func makeAPICall() {
    // create helper object
    let helper = ModelHelper()
    helper.createModels(receivedDict: result! as NSDictionary)

            // store the showHideDict
    for index in 0...(Modelclass.models.count - 1) {
        self.showHideDict[index] = true
    }

    DispatchQueue.main.async {
         self.tableView.reloadData()
    }
}

在您的 UITableViewDelegate 方法中,我认为您需要检查字典中的数据是否按预期填充。例如,这是我在代码中经常做的事情:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{
    return tableData?.count ?? 0
}

也就是说:如果 tableData 不是 nil,那么 return 是数组中元素的数量。否则 return 0

然后在您的 cellForRowAt 方法中,有条件地检查您的 showHideDict 中的数据是否按您预期的那样填充,如果不是,请不要强制解包。 Swift 使用可选值强制安全...使用它而不是反对它。

一旦您的 API 调用完成,您需要做的就是 tableView.reloadData() 并且将使用您新填充的数据构建表视图。