0

这是我的代码:

- (void)searchTextDidChange:(TaggingSearchBar *)searchBar
                       text:(NSString *)searchText {


    NSArray *allPlayers = self.sessionModel.taggingModel.PlayersFromDatabase;
    [self.filterdPlayers removeAllObjects];
    if (searchText.length > 0) {
        self.isFilterd = YES;
        for (Player *p in allPlayers) {
            NSString *playerDescription = [NSString stringWithFormat:@"%d %@", p.jerseyNumber.intValue, p.fullName];
            if ([playerDescription rangeOfString:searchText].location != NSNotFound) {
                [self.filterdPlayers addObject:playerDescription];
            }
        }
    }
    else {
        self.filterdPlayers = [allPlayers mutableCopy];
        self.isFilterd = NO ;
    }
}

出了点问题,因为当我在调试并输入 C (我有一个名为 Cat 的人)时,我在 self.filtredPlayers 中得到了 nil。调试器显示帽子站在这个地方,如果一切正常,但什么也没发生。什么可能导致这种情况?我试过 containsstring + addObject:p

4

2 回答 2

2

该代码在功能方面看起来不错。为了安全起见,我会将内部if子句更改为:

if (searchText && [playerDescription rangeOfString:searchText].length) {

这更安全,因为如果searchText为 nil,您的代码将崩溃。我了解您之前已对其进行了验证,但这是最佳做法。

此外,我认为您的问题是由于您添加了字符串对象而不是Player对象。当搜索词为空/nil 时,添加Player对象:

self.filterdPlayers = [allPlayers mutableCopy];

但是当搜索词存在时,您添加字符串playerDescription而不是Player对象:

[self.filterdPlayers addObject:p];
于 2016-02-22T09:22:03.280 回答
0

用这个

NSString *search_str = [NSString stringWithFormat:@"%@%@",searchBar.text, searchText];

   if ( playerDescription.containsString(searchBar.text)) //instead of  if ([playerDescription rangeOfString:searchText].location != NSNotFound)
于 2016-02-22T09:38:11.403 回答