【问题标题】:Search bar works correctly but crashes when I want to set table cell label搜索栏正常工作,但当我想设置表格单元格标签时崩溃
【发布时间】:2015-02-25 15:11:43
【问题描述】:

我正在尝试使用我的表格视图实现搜索栏。我的表格视图和搜索栏都是使用情节提要放置的。在我的 ViewDidLoad 中,我有:

self.searchDisplayController.delegate = self;
self.searchDisplayController.searchResultsDataSource = self;
self.searchDisplayController.searchResultsDelegate = self;

并实现了两种搜索方式:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *bPredicate = [NSPredicate predicateWithFormat:@"nickname contains[cd] %@",searchText];
    NSArray* array = [[NSArray alloc]init];
    array = [self.fbfriendList filteredArrayUsingPredicate:bPredicate];
    self.searchResult = [NSMutableArray arrayWithArray:array];
}
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText:searchString scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
    return YES;
}

在我的表格视图方法中:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"addFriend";

    cell = [self.tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FFAddFriendTableViewCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}
if (tableView == self.searchDisplayController.searchResultsTableView)
{
    NSLog(@"!!! %@",self.searchResult);
    if (cell == nil) {
         [self.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"FFAddFriendTableViewCell" bundle:nil] forCellReuseIdentifier:@"addFriend"];
    }
    else{
    NSLog(@"!!! %@",self.searchResult);
 // LINE XXXXXXX
        cell.nameLabel.text = [[self.searchResult objectAtIndex:indexPath.row] objectForKey:@"nickname"]; 
    }
}
else
{
}
cell.nameLabel.text = [[self.fbfriendList objectAtIndex:indexPath.row] objectForKey:@"nickname"];
return cell;
}

就搜索而言,一切都相应地起作用。我的 NSLogs 在我的数组中打印出正确的数据。但是,当我想根据 NSMutableArray 中的数据设置单元格的标签时,它会因错误而崩溃:

-[__NSCFString setText:]: unrecognized selector sent to instance 0x7ff38b5b70e0

我是否遗漏了将搜索栏应用于我的 tableView 的任何关键基础知识?

【问题讨论】:

    标签: ios objective-c uisearchbar


    【解决方案1】:

    在“// LINE XXXXXX”下面的行中,你有,

    cell.nameLabel = ...
    

    应该是这样的,

    cell.nameLabel.text = ...
    

    【讨论】:

    • 我的菜鸟错误。我已将其更改为 cell.nameLabel.text。它现在不会崩溃,但不会显示正确的单元格。如果有 2 个结果,表格将只显示我的主表格中的前两个单元格。我错过了什么吗?
    • @EricChuang,我不确定我是否理解您的问题。如果只有 2 个结果,您应该只会在搜索结果表中看到 2 个单元格。
    【解决方案2】:

    现在将您的表格视图 cellrowindex 方法更改为此..

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *simpleTableIdentifier = @"addFriend";
    
        cell = [self.tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    
        if (cell == nil) {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"FFAddFriendTableViewCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }
    
        if (tableView == self.searchDisplayController.searchResultsTableView)
        {
            cell.nameLabel.text = [[self.searchResult objectAtIndex:indexPath.row] objectForKey:@"nickname"];
        } else
        {
           cell.nameLabel.text = [[self.fbfriendList objectAtIndex:indexPath.row] objectForKey:@"nickname"];
        }
    
        return cell;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 2011-02-10
      相关资源
      最近更新 更多