UISearchBar和TableViewController

时间:2014-02-21 17:52:49

标签: ios7 uitableview uisearchbar uisearchbardisplaycontrol

我有一个完美的TableView。 现在,我在TableView中添加了SearchBar component and Display ViewController的搜索。 我希望根据NSArray _rotulos填充的标签进行搜索。

@property (nonatomic, strong) NSArray *rotulos;

我在viewDidLoad方法中填充内容(有更多对象,但这只是一个例子)

_rotulos = @[@"Item 1", @"Item 2", @"Item 3", @"Block 1", @"Block 2",@"Block 3"];

我填入我的cellForRowAtIndexPath方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"TableCell";
    TableCell *cell = (TableCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    //Configure the cell...
       if (cell == nil) {
            cell = [[TableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }

    long row = [indexPath row];

    cell.rotuloLabel.text    = _rotulos[row];
    cell.descricaoLabel.text = _vinicola[row];
    cell.uvaLabel.text       = _uva[row];

    return cell;
}

这很好用。 我在SearchBar中点击并开始输入时遇到问题。

以下是进行此搜索的代码。

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"_rotulos contains[c] %@", searchText];
    searchResults = [recipes filteredArrayUsingPredicate:resultPredicate];
}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText:searchString
            scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                objectAtIndex:[self.searchDisplayController.searchBar
                selectedScopeButtonIndex]]];

    return YES;
}

我在第NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"_rotulos contains[c] %@", searchText];行中遇到了问题 这是我的输出由于未捕获的异常'NSUnknownKeyException'终止应用程序,原因:'[< __ NSCFConstantString 0x243c8> valueForUndefinedKey:]:此类不是键_rotulos的键值编码兼容。'

我遵循这个Tutorial但在我的情况下_rotulos不是某些classe的属性,是NSArray。

我如何解决这个问题? 对不起,如果忘了发帖。

1 个答案:

答案 0 :(得分:0)

您无法使用predicateWithFormat:形成此过滤器。使用predicateWithBlock:或以其他方式创建过滤后的数组(即不是filteredArrayUsingPredicate:)。