ios - 搜索栏委托(delegate)

标签 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。调试器显示帽子站在这个地方,如果一切正常但什么也没发生。什么会导致这个? 我试过 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/

相关文章:

iphone - 如何在 iPhone 中的分组 TableView 单元格中创建文本字段

iphone - 调试构建和分发构建的 iPhone 项目build设置的主要区别是什么?

ios - -[UITableView _endCellAnimationsWithContext :] When trying to delete 中的 PFTableViewController 断言失败

iOS 9 通用链接不起作用

ios - 关于监控 iphone 应用程序互联网 (http) 流量

ios - 找不到 != 的重载 - Swift iBeacon

c# - 如何在适用于 Windows、iOS 和 Android 的 Xamarin 中使用 ZeroMQ

ios - 使用 IF 语句更改图像

数组中的 C++ 结构,帮助!

iphone - UINavigationbar 覆盖 View 顶部