我正在使用UISearchController
来获取tableview
的对象。我的主要问题是在用户输入文本时堆叠大量请求。
每次用户键入一个字符时,控制器都会向我的api发送另一个请求,这对我来说没有意义,因为第一个请求肯定是最长的(如果用户键入“a”,很多项目即将到来,请求将花费大量时间),它将覆盖短请求。
用户类型:a(第一个请求需要10秒才能获取包含a的所有内容)
用户继续输入:bacate(很多请求比第一个要快)
api会返回所有bacate(水果abacate)的请求,并会在屏幕上显示。
api NOW(因为需要花费很多时间)返回单个a的请求并覆盖包含a的所有水果。
对不起我的问题,我真的很困惑。
由于
答案 0 :(得分:2)
您可以延迟发送请求并取消之前的请求。 这是我的例子:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText != "" {
// to limit network activity, reload half a second after last key press.
NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(MyController.search), object: nil)
self.perform(#selector(MyController.search), with: nil, afterDelay: 0.5)
}
}
func search() {
// Send request
}
答案 1 :(得分:0)
您可以为搜索添加限制
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
// to limit network activity, reload half a second after last key press.
NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(self.sendRequest), object: nil)
self.perform(#selector(self.reload), with: nil, afterDelay: 0.5)
}
func sendRequest() {
print("send request")
}