在我的应用中,我有一个searchbar
来搜索3种不同类型的项目。这三个项目有不同的数据源,因此每次文本更改我都会发送3个不同的网络请求。我在UITableView
的3个不同部分中显示了这3种类型的项目。收到任何请求的响应后,我更新数据源并致电tableView.reloadData
。获取一个项目(用户)的示例函数如下所示: -
func searchUsers(withName name: String) {
showNetworkActivity()
UserService.search(query: name) { (data, error) in
Queue.Main.execute({
self.hideNetworkActivity()
if error == nil {
self.searchedUsers = data as! [User]
} else {
self.searchedUsers = []
}
self.searchTableView.reloadData()
})
}
}
但由于索引超出约束异常,我的应用程序随机崩溃。当新数据到达但是tableview忙于根据先前接收的数据重新加载时发生崩溃。我试图只重新加载相关的部分,而不是重新加载整个表,但它会导致更多的崩溃。我怎样才能避免这种崩溃?
PS:Queue.Main确保所有事情都在主线程上完成。