这是我的代码:
- (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
答案 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)