0

Я реализовал UISearchBar с UISearchDisplayController в контроллере Tableview, но я получаю следующий вопрос в нажав на строку поиска:IOS: UISearchBar с UISearchDisplayController разбился, нажав на SearchBar

провал утверждение - [UISearchResultsTableView dequeueReusableCellWithIdentifier: forIndexPath :], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.5.2/UITableView

Я установил все методы делегата и используя следующий код:

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

     _searchResults = [_searchResults filteredArrayUsingPredicate:resultPredicate]; 

} 

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

    return YES; 
} 
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView { 

    [tableView setContentInset:UIEdgeInsetsMake(100, 0, 0, 0)]; 


} 

Код для cellForRowAtIndexPath является:

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

    METransitionTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    if (cell == nil) { 
     cell = [[METransitionTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

     // Configure common elements here 

    } 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     //activeProject = [_searchResults objectAtIndex:indexPath.row]; 
    } else { 


    } 


    NSString *transition = @"Test"; 

    cell.cupponTitle.text = transition; 
    cell.favourtiesButton.tag = indexPath.row; 
    [cell.favourtiesButton addTarget:self action:@selector(favourtiesClicked:) forControlEvents:UIControlEventTouchUpInside]; 

    return cell; 
} 

ответ

0

Вы используете метод dequeueReusableCellWithIdentifier:forIndexPath:. В соответствии с яблочными документами перед вызовом этого метода необходимо зарегистрировать файл класса или nib с помощью метода registerNib:forCellReuseIdentifier: или registerClass:forCellReuseIdentifier:. Вы не зарегистрировали нип или класс для повторного использования идентификатора "TransitionCell".

В соответствии с вашим кодом вы, кажется, ожидаете, что метод dequeue возвращает nil, если у него нет ячейки, чтобы дать вам. Вы должны использовать dequeueReusableCellWithIdentifier: для такого поведения:

METransitionTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[METransitionTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    // Configure common elements here 

} 
+0

но это происходит сбой, если мы нажмем на uisearchbar .. как я могу дать CellIdentifier к UISearchDisplayController? –

+0

Обновлен код, пожалуйста, обновите метод tableFor cellForRowAtIndexPath. –

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