UISearchController请求webservice而不堆叠许多请求

时间:2017-02-07 19:13:47

标签: ios swift api uisearchcontroller

我正在使用UISearchController来获取tableview的对象。我的主要问题是在用户输入文本时堆叠大量请求。

每次用户键入一个字符时,控制器都会向我的api发送另一个请求,这对我来说没有意义,因为第一个请求肯定是最长的(如果用户键入“a”,很多项目即将到来,请求将花费大量时间),它将覆盖短请求。

  1. 用户类型:a(第一个请求需要10秒才能获取包含a的所有内容)

  2. 用户继续输入:bacate(很多请求比第一个要快)

  3. api会返回所有bacate(水果abacate)的请求,并会在屏幕上显示。

  4. api NOW(因为需要花费很多时间)返回单个a的请求并覆盖包含a的所有水果。

  5. 对不起我的问题,我真的很困惑。

    由于

2 个答案:

答案 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")

}