iOS“cancelPreviousPerformRequestsWithTarget”在搜索字段委托方法中不起作用

问题描述:

我在UISearchBarDelegate协议方法textDidChange中没有执行的方法cancelPreviousPerformRequestsWithTarget有问题。iOS“cancelPreviousPerformRequestsWithTarget”在搜索字段委托方法中不起作用

- (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次,并且该方法连续调用5次。问题在哪里,嗯?

假设在您的测试中,搜索文本每次都不相同。所以取消请求将不匹配,因为您尚未对该对象发出请求。

而是使用:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:updateSelector object:nil]; 

到通配符选择和目标相匹配。

请注意,使用定时器比取消执行选择器更好...