【本文代码针对iOS (其实也没多少代码),安卓或者其他开发遇到这样的问题可以参考一下这个逻辑。】
现在很多app都有搜索框内容变更后就直接搜索相关内容而不用点击搜索按钮这种设计。
而在输入过程中可能会进行多次搜索。
但即使是异步搜索,先调用的搜索返回结果更晚的情况还是比较罕见的。
(不过在返回数据量大的时候是有这个可能的)
今天在项目中遇到一个bug,在输入框搜索后删除里面的字符,全部删完之后却显示了搜索第一个字符的结果。
因为搜索无结果是用的DZNEmptyDataSetSource,本来无结果却因为接口返回重新刷新了。
我在搜索所在的类里面加了一个变量searchText,用于保存当前输入框的值,或者直接获取searchBar的text也可以。
在调用搜索接口前先
NSString *text = self.searchText;
在成功回调开头加上判断
success:^(){
if ([text isEqualToString:self.searchText]) {
return;
}
……
}
就可以避免以上问题,同时正常搜索的时候也不用执行太多后面的无用代码,反正数据也会被重新覆盖,也算是优化了这一块的性能。