重新加载数据时刷新tableView闪烁
问题描述:
因此,刷新函数由于索引超出范围问题而导致应用程序崩溃。然后,我在第一次清空列表后添加了reloadData。现在我刷新时会出现闪烁,因为它首先加载空列表,然后加载填充列表。我应该在哪里清空列表或如何摆脱闪烁?使用SWIFT 3和的Xcode 8.2.1重新加载数据时刷新tableView闪烁
func getData()
{
fetchedUsers.removeAll()
self.userTableView.reloadData()
//myphpfileurl
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "GET"
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration, delegate: nil, delegateQueue: OperationQueue.main)
let task = session.dataTask(with: request) { (data, response, error) in
if (error != nil) {
print("Error")
}
else{
do{
let fetchedData = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves) as! NSArray
for eachFetchedUsers in fetchedData {
let eachUsers = eachFetchedUsers as! [String : Any]
let id = eachUsers["id"] as! String
let name = eachUsers["Nimi"] as! String
let email = eachUsers["Sahkoposti"] as! String
let company = eachUsers["Yritys"] as! String
self.fetchedUsers.append(Users(id : id, name: name, email : email, company: company))
}
self.userTableView.reloadData()
self.refreshControl.endRefreshing()
}
catch{
print("Error 2")
}
}
}
task.resume()
}
答
林尝试像这样重新加载表
DispatchQueue.main.async {
self.userTableView.reloadData()
self.refreshControl.endRefreshing()
}
+0
我尝试添加这一点,但细胞当它们首先变空时仍然保持闪烁。如果我删除self.userTableView.reloadData()第4行应用程序崩溃时,我刷新很多次。 –
+0
@SimoKorpikoski以同步模式调用Rest API。使一个函数执行rest api的代码并从viewdidload调用此函数 –
'self.userTableView.reloadData() self.refreshControl.endRefreshing()' 你需要在那里呼吁MainThread 'DispatchQueue.main.async { self.userTableView.reloadData() self.refreshControl.endRefreshing() }' – dRAGONAIR