搜索栏代表

时间:2016-02-22 09:11:20

标签: ios objective-c iphone delegates uisearchbardelegate

这是我的代码:

- (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。调试器显示帽子站在这个地方,如果一切正常但没有发生任何事情。什么可能导致这个? 我试过containssstring + addObject:p

2 个答案:

答案 0 :(得分:2)

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

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

这更安全,因为如果searchText为零,则代码会崩溃。我知道您之前已经验证过,但这是最好的做法。

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

self.filterdPlayers = [allPlayers mutableCopy];

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

[self.filterdPlayers addObject:p];

答案 1 :(得分:0)

使用此

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

   if ( playerDescription.containsString(searchBar.text)) //instead of  if ([playerDescription rangeOfString:searchText].location != NSNotFound)