我有一个问题,其中一张表显示了一个很长的钻取列表,当用户导航离开并返回时,我想保留其当前滚动位置。避免重新加载UITableView数据
在我的视图控制器,我有代码,通过调用getDrillList(optimize: true)
存储数据在一个名为drillListArray
的属性中,每当视图出现时加载UITableView的数据。
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()
}
})
}
两个问题
代码首先,如果用户示出了SEGUE到另一个视图控制器,并且然后经由Back
返回,如何可以检查如果数据已经加载以避免再次加载它?检查数组是否为空是否安全?
其次,有没有什么影响我应该注意这种方法?
为什么立即downvote?请帮我修改我的问题。 – paul
我没有投票,但最有可能是由于你的问题缺乏信息。你展示了一段代码,它本身并不意味着什么,并希望人们能够在不知道你在做什么的情况下提供帮助。请提供[最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。 –
把getDrillList放在ViewWillAppear中。将解决问题。 –