2014-02-21 4 views
0

У меня был TableView, который отлично работал. Теперь я включил поиск в TableView с SearchBar component and Display ViewController. Я хочу, чтобы поиск выполнялся на основе метки, заполненной NSArray _rotulos.UISearchBar и TableViewController

@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 не является свойством какого-либо класса, является NSArray.

Как я исправить это? Извините, если забудьте что-нибудь написать.

ответ

0

Вы не можете создать этот фильтр, используя predicateWithFormat:. Используйте predicateWithBlock: или создайте фильтрованный массив каким-либо другим способом (т. Е. Не filteredArrayUsingPredicate:).

+0

Как это сделать? Я ищу несколько примеров, но я их не нахожу. –

+0

Я не знаю, потому что я не понимаю, что вы пытаетесь сделать. Но посмотрите, например, на этот код: https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch08p438searchableTable/ch21p718sections/RootViewController.m Посмотрите на реализацию 'filterData:', чтобы увидеть, как я формирую отфильтрованный массив для моей таблицы на основе того, что пользователь вводит в поле поиска. – matt

+0

Я хочу, чтобы фильтр NSArray _rotulos (который заполняет мой TableView) хранит этот фильтрованный массив в моем NSArray _resultadosBusca и перезагружает мой TableView с помощью этих новых данных. –

Смежные вопросы