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

置いた

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

そこにあり、違反していないようです

ちょっと不思議なので確認したいです。

パラメータの 1 つ、つまり searchText を単に searchBar.text に尋ねるだけで取得できるのに、searchBar と searchText の 2 つのパラメータを持つ必要があるのはなぜですか。

なぜ持っていないのですか

-(void)searchBarTextDidChange:(UISearchBar *) searchBar

または -(void)textDidChangeForSearchBar:(UISearchBar *) searchBar

している

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

searchText が重要な情報を運ぶことを意味します。これは、searchBar.text が searchText と異なる可能性があることを意味します。決してそうではありません。もちろん、あなたが物事を変えない限り。

実際、私は、searchText が searchBar.text を指しているか、単にそのコピーを指しているのではないかと疑っていました。

4

2 に答える 2

2

それは単なるコーディング標準だと思います。

デリゲート メソッドの最初の引数を呼び出し元のクラスにすることをお勧めします。

その(void)searchBar:(UISearchBar *)searchBarとおりです。

textDidChange:(NSString *)searchTextここで、どちらから取得できるかを省略した場合searchBar.Text
、私も Apple もこのメソッドの適切な名前を見つけられませんでした。

于 2012-12-13T11:32:08.237 に答える
1

可能性も含めて調べてみました。別のパラメーターを提供するための唯一の領域は、これら 2 つの関数に一貫性を持たせることだと思います

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

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
于 2012-12-13T11:48:44.523 に答える