【发布时间】:2017-09-15 11:12:46
【问题描述】:
我有一个问题,表格显示一长串演练,当用户离开然后返回时,我希望将其保留在当前滚动位置。
在我的视图控制器中,我的代码可以在视图出现时通过调用 getDrillList(optimize: true) 来加载 UITableView 的数据,getDrillList(optimize: true) 将数据存储在名为 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 返回,我如何检查数据是否已经加载以避免第二次加载?检查数组是否为空是否安全?
其次,这种方法有什么我应该注意的后果吗?
【问题讨论】:
-
为什么要立即投反对票?请帮我修改我的问题。
-
我没有投反对票,但很可能是由于您的问题缺乏信息。你展示了一段代码,它本身没有任何意义,并期望人们能够在不知道你实际在做什么的情况下提供帮助。请提供Minimal, Complete and Verifiable example。
-
将 getDrillList 放入 ViewWillAppear。将解决问题。
-
@Dávid Pásztor 谢谢,我已经添加了方法调用。我希望他们能给我一个在否决之前进行编辑的机会。似乎不公平。
-
不要使用 appdelegate 来存储你的值,使用你自定义的单例类来处理所有要存储的值
标签: ios swift uitableview swift3