如何在api完成调用之前停止加载Tableview?(后退按钮-案例)

时间:2019-05-09 05:31:20

标签: swift api tableview

我有一个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
    }

在前一个屏幕上。感谢您指出正确的方向。 (都发表评论的人)

1 个答案:

答案 0 :(得分:1)

有两种可能的解决方案:

  1. 同步departurehourflightcount dataArray,直到两个tableview都准备好后,您才应该重新加载arrays
  2. 或者在访问departurehour之前添加支票,无论是否为空:

if !departurehour.isEmpty { zerointdeparturehour = String(departurehour[indexPath.row]) }