我遇到方法cancelPreviousPerformRequestsWithTarget
未在UISearchBarDelegate
协议方法textDidChange
中执行的问题。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
SEL updateSelector = @selector(updateTableViewWithSearchPhrase:);
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:updateSelector object:searchText];
[self performSelector:updateSelector withObject:searchText afterDelay:0.5f];
}
我已经连续快速点击了一个键盘按钮5次,并且该方法连续被调用了5次。问题出在哪里,嗯?
答案 0 :(得分:0)
据推测,在您的测试中,搜索文本每次都不同。因此,取消请求无法匹配,因为您还没有使用该对象发出请求。
改为使用:
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:updateSelector object:nil];
通配符匹配选择器和目标。
请注意,除了取消执行选择器之外,使用计时器通常更好...