这是我的代码:
- (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
最佳答案
代码在功能方面看起来不错。为了安全起见,我会将内部 if
子句更改为:
if (searchText && [playerDescription rangeOfString:searchText].length) {
这样更安全,因为如果 searchText
为 nil,您的代码就会崩溃。我知道您之前已验证过,但这是最佳做法。
此外,我认为您的问题是由于您添加了字符串对象,而不是 Player
对象。当搜索词为空/nil 时,您添加 Player
对象:
self.filterdPlayers = [allPlayers mutableCopy];
但是当搜索项存在时,您添加字符串 playerDescription
而不是 Player
对象:
[self.filterdPlayers addObject:p];
关于ios - 搜索栏委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35549644/