在viewDidLoad()

时间:2017-10-03 16:38:15

标签: ios swift uitableview viewdidload

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

有问题的类变量:

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()
    }
}

1 个答案:

答案 0 :(得分:3)

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

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

这就是说:如果tableData不是nil,则返回数组中的元素数。否则返回0

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

完成API调用后,您需要做的就是执行tableView.reloadData(),并使用新填充的数据构建tableview。

相关问题