UISearchController 请求 web 服务而不堆叠许多请求
UISearchController request to webservice without stacking many requests
我正在使用 UISearchController
将对象发送到我的 tableview
。我的主要问题是在用户键入文本时堆叠大量请求。
每次用户键入一个字符时,控制器都会向我的 api 发送另一个请求,这对我来说没有意义,因为第一个请求肯定是最长的(如果用户键入"a",大量物品即将到来,请求会耗费大量时间),会覆盖短请求
用户类型:a(第一个请求需要 10 秒才能获取包含 a 的所有内容)
用户继续输入:bacate(很多请求比第一个快)
apireturns所有bacate(水果abacate)的请求都会显示在屏幕上。
现在api(因为要花很多时间)returns请求单个a并用包含a的所有水果覆盖。
对不起,我的问题很乱,我真的很困惑。
谢谢
那么你可以延迟发送请求并取消之前的请求。
这是我的例子:
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
}
您可以对搜索进行限制
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")
}
我正在使用 UISearchController
将对象发送到我的 tableview
。我的主要问题是在用户键入文本时堆叠大量请求。
每次用户键入一个字符时,控制器都会向我的 api 发送另一个请求,这对我来说没有意义,因为第一个请求肯定是最长的(如果用户键入"a",大量物品即将到来,请求会耗费大量时间),会覆盖短请求
用户类型:a(第一个请求需要 10 秒才能获取包含 a 的所有内容)
用户继续输入:bacate(很多请求比第一个快)
apireturns所有bacate(水果abacate)的请求都会显示在屏幕上。
现在api(因为要花很多时间)returns请求单个a并用包含a的所有水果覆盖。
对不起,我的问题很乱,我真的很困惑。
谢谢
那么你可以延迟发送请求并取消之前的请求。 这是我的例子:
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
}
您可以对搜索进行限制
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")
}