避免重新加载UITableView数据

时间:2017-09-15 11:12:47

标签: ios swift uitableview swift3

我遇到一个问题,表格会显示一长串的演习,当用户导航离开然后返回时,我希望将其留在当前的滚动位置。

在我的视图控制器中,我有代码,只要视图出现,就会通过调用getDrillList(optimize: true)来加载UITableView的数据,drillListArray将数据存储在名为override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) getDrillList(optimize: true) } 的属性中。

private func getDrillList(optimize: Bool = false)
{
    // MAKE API CALL, THE ARRAY IS POPULATED IN THE COMPLETE HANDLER

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    SharedNetworkConnection.apiGetDrillList(apiToken: appDelegate.apiToken, limit: (optimize ? 13 : 0), completionHandler: { data, response, error in
        guard let data = data, error == nil else {                                                 // check for fundamental networking error
            print("error=\(error)")
            return
        }

        if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
            // 403 on no token
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print("response = \(response)")

            SharedNetworkConnection.apiLoginWithStoredCredentials(completionHandler: { data, response, error in
                let appDelegate = UIApplication.shared.delegate as! AppDelegate
                let json = try? JSONSerialization.jsonObject(with: data!, options: [])
                if let dictionary = json as? [String: Any] {
                    if let apiToken = dictionary["token"] as? (String) {
                        appDelegate.apiToken = apiToken
                        self.getDrillList()
                    }
                }
            })
            return
        }

        self.drillListParser = DrillListParser(jsonString: String(data: data, encoding: .utf8)!)
        self.drillListArray = (self.drillListParser?.getDrillListArray())!

        DispatchQueue.main.async {
            self.drillTableView.reloadData()
        }

        if optimize {
            self.getDrillList()
        }
    })
}

以下是加载数据的代码

Back

两个问题

首先,如果向用户显示另一个视图控制器的segue,然后通过<form class="form-horizontal">返回,我如何检查数据是否已加载以避免再次加载?检查阵列是否为空是否安全?

其次,这种方法我应该注意哪些重新发布?

1 个答案:

答案 0 :(得分:2)

getDrillList(optimize: true)中添加viewDidLoad(),它会在生命周期中调用一次,或者您可以通过布尔标记检查是否已加载数据。