iOS:等到用户完成input然后发送请求

我有一个简单的UITableViewUISearchBar / UISearchDisplayController通过使用RKObjectManager从远程ElasticSearch服务器获取结果。 我遇到的问题是,如果用户键入的速度很快,或者术语稍微大点,那么有些请求会失败,有时我不会得到结果。

有没有一个select, 等到用户停止input ,然后发送请求,而不是发送每个他所键入的每个字母的请求?

在发送请求之前添加一个小的延迟,如果用户继续input,则取消延迟的请求

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { [NSObject cancelPreviousPerformRequestsWithTarget:self]; [self performSelector:@selector(sendSearchRequest) withObject:searchText afterDelay:0.1f]; } 

您可能需要调整延迟时间。 太长,对用户来说显而易见的是有一个延迟,太短,你现在有同样的问题

这是快速版本

 NSObject.cancelPreviousPerformRequestsWithTarget(self) self.performSelector("searchForText:", withObject: searchString, afterDelay: 0.5)