在什么情况下searchBar.text与此函数中的searchText不同?

时间:2012-12-13 11:26:52

标签: objective-c xcode

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

我把

NSAssert([searchBar.text isEqualToString:searchText],@"Search Bar Must Be The Same"); 

那里似乎没有被违反

我只是想确定,因为它有点奇怪。

为什么要使用2个参数,searchBar和searchText,如果其中一个参数,即searchText可以通过询问searchBar.text来获取

为什么不拥有

-(void)searchBarTextDidChange:(UISearchBar *) searchBar

或      - (void)textDidChangeForSearchBar:(UISearchBar *)searchBar

做到这一点

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

暗示searchText包含基本信息,这意味着searchBar.text可能与searchText不同。它永远不会。除非你改变了事情。

事实上,我怀疑searchText指向searchBar.text或只是它的副本。

2 个答案:

答案 0 :(得分:2)

我会说这只是一个编码标准。

这是一个很好的做法,委托方法的第一个参数应该是调用类

所以(void)searchBar:(UISearchBar *)searchBar就是这样。

现在,如果您省略textDidChange:(NSString *)searchText,可以从searchBar.Text检索
那时我和苹果都没有找到这个方法的好名字。

答案 1 :(得分:1)

我也检查过所有可能性。我认为提供另一个参数的唯一区域是在这两个函数中保持一致

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText