我有一个tableview以及一个api和api调用函数。一旦接收到数据,我就在viewDidLoad()和Table.reloadData()上使用我的apicall()函数。在我第一次看到此屏幕时,此方法效果很好。
我在tableview中有一个代码。
zerointdeparturehour = String(departurehour[indexPath.row])
从数组中获取时间,该数组填充在api调用函数内部。
一切正常。视图loading,api被调用,获取数据和tableview重新加载并填充。
,并且如果再次调用api,则通过api.hour.removeAll()删除从api调用创建的所有数组值。 (我用了这个,所以我可以在同一屏幕上一次又一次地调用api,以获取不同的日期)
但是
如果我按下后退按钮(默认后退按钮)返回上一页,并且如果我尝试再次返回此页面,则viewDidLoad()会调用apicall()函数,
但是我遇到了错误
zerointdeparturehour = String(departurehour[indexPath.row]) - Index out of bounds.
为什么只有当我从tableview页面移回到上一页并再次回到此tableview页面时,才会发生这种情况? (我知道发生这种情况,是因为api尚未填充其中的信息,因此当下的hourlyhour数组为零)
为什么第一次不会发生
我也从Api得到了我的资料,这是第一次工作。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return flightcount // comes from api
}
I do have a function to check if the flightcount is 0 or not and what to do when count is 0 .
应用程序崩溃是因为Flightcount保留了先前屏幕上的值,并且该表试图加载该值,从而导致崩溃。
我通过简单地将其重新初始化为0来解决了该问题。
override func viewDidAppear(_ animated: Bool) {
flightcount = 0
}
在前一个屏幕上。感谢您指出正确的方向。 (都发表评论的人)
答案 0 :(得分:1)
有两种可能的解决方案:
departurehour
和flightcount
dataArray,直到两个tableview
都准备好后,您才应该重新加载arrays
。departurehour
之前添加支票,无论是否为空: if !departurehour.isEmpty {
zerointdeparturehour = String(departurehour[indexPath.row])
}