在 viewDidLoad() 之前调用 UITableView 委托方法
UITableView delegate methods being called before viewDidLoad()
在 UIViewController
的 viewDidLoad()
中,调用了一个方法来更新 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()
并且将使用您新填充的数据构建表视图。
在 UIViewController
的 viewDidLoad()
中,调用了一个方法来更新 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()
并且将使用您新填充的数据构建表视图。