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()
}
}
答案 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。