我有一个文本字段,每次textField文本更改时都会从API中获取数据,并更新表格。
override func viewDidLoad() {
super.viewDidLoad()
searchTextField.addTarget(self, action: #selector(textFieldDidChange), for: UIControlEvents.editingChanged)
}
func textFieldDidChange() {
let queryString = self.searchTextField.text
SearchWSFacade.getSearchResults(queryString: queryString) {
(error) in
if (error == nil) {
self.tableView.reloadData()
}
}
}
这非常有效,只有当用户键入慢时(允许在键入下一个字符之前加载数据)。如果用户快速键入,我们会遇到问题,因为多次调用reloadData。
如果我在搜索上一次搜索时取消了完成处理程序,则可以解决此问题。我该怎么做呢?或者有更好的解决方案吗?
答案 0 :(得分:1)
如果您使用操作,则可以设置依赖关系,以便在下一个完成之前不会启动。并且,与块不同,操作可以取消。
答案 1 :(得分:0)
您可以在UIViewController中设置一个包含文本字段的简单标志 - busyCallingAPI
,或许 - 在启动API调用时将其设置为true,在完成处理程序中将其设置为false,并在textFieldDidChange
中设置为false仅在busyCallingAPI
为假