Ошибка пользовательской ячейки при перезагрузке searchResultsTableView - PullRequest
2 голосов
/ 01 ноября 2011

Когда я нажимаю эту кнопку - [Поиск], появляется всплывающее окно.

Если я записываю условия поиска и нажимаю кнопку «Поиск», данные заполняются в NSMutableArray.

В этой таблице поиска используется «пользовательская ячейка».

Я не могу объединить «пользовательскую ячейку» с данными в NSMutableArray.

получить ошибки при перезагрузке searchTableView.

Как я могу это сделать? Пожалуйста, помогите мне! ~ Спасибо ~

[ошибка]

2011-10-31 20: 56: 52.915 TheBE [1207: 10403] abcd 2011-10-31 20: 56: 53.158 TheBE [1207: 10403] * Ошибка подтверждения в - [UISearchResultsTableView _createPreparedCellForGlobalRow: withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:60 2011-10-31 20: 56: 53.159 TheBE [1207: 10403] Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «UITableView dataSource должен вернуть ячейку из tableView: cellForRowAtIndexPath: ' ** Первый вызов стека вызовов: (0x12a2052 0x1753d0a 0x124aa78 0xc712db 0x381ee3 0x382589 0x36ddfd 0x37c851 0x327322 0x12a3e72 0x29ba92d 0x29c4827 0x294afa7 0x294cea6 0x294c580 0x12769ce 0x120d670 0x11d94f6 0x11d8db4 0x11d8ccb 0x1fae879 0x1fae93e 0x2e8a9b 0x1d68 0x1cc5 0x1)



    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

         //****** custom cell *********/
        SearchContentCell *cell = (SearchContentCell *)[tableView dequeueReusableCellWithIdentifier:@"SearchCell"];

        [cell.contentLabel setLineBreakMode:UILineBreakModeWordWrap];
        [cell.contentLabel setMinimumFontSize:FONT_SIZE];
        [cell.contentLabel setNumberOfLines:0];
        [cell.contentLabel setFont:[UIFont systemFontOfSize:FONT_SIZE]];
        [cell.contentLabel setTag:1];     

        ....... 
        cell.verseLabel.text = @"Test2" ; 
        cell.contentLabel.text = @"test"; 
         .......

        return cell;   

    }
    -(void)mockSearch:(NSString*)searchString  
    {   
        [_data removeAllObjects];   
        [request setEntity:entityBible]; 
    //        
        //create predicate   
        NSString *wildcardedString = [NSString stringWithFormat:@"*%@*",searchString];  
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"content like %@", wildcardedString];

        [request setPredicate:predicate]; 

        NSError *error;
        NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
        if (mutableFetchResults == nil) {
            // Handle the error;
            NSLog(@"eerror");
        }

        _data = mutableFetchResults;

         [self.searchDisplayController.searchResultsTableView reloadData];  

    }
    -(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{

        [self mockSearch:searchBar.text]; 

    }

Я думаю, что часть ошибки:

[self.searchDisplayController.searchResultsTableView reloadData];

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011

Если это действительно то, на что похож ваш tableView:cellForRowAtIndexPath: метод, вам не хватает части, которая выделяет новую ячейку, если dequeueReusableCellWithIdentifier: возвращает ноль.

0 голосов
/ 14 ноября 2013

пользовательская ячейка в раскадровке, а не в «self.searchDisplayController.searchResultsTableView», поэтому просто измените:

SearchContentCell * cell = (SearchContentCell *) [-> tableView <- dequeueReusableCellWithIdentifier: @ "SearchCell"]; </p>

до

SearchContentCell * cell = (SearchContentCell *) [-> self.tableView <- dequeueReusableCellWithIdentifier: @ "SearchCell"]; </p>

0 голосов
/ 21 февраля 2012

У меня была такая же ошибка.Я думаю, это потому, что настройка определенных свойств кнопки означает, что представление (очевидно, лениво созданное) должно быть настроено, что означает, что таблица должна быть готова к работе, а это еще не возможно, возможно, потому что ее источник данных не был подключенили что-то.Попробуйте переместить настройку вашей кнопки позже в методе viewDidLoad;это сработало для меня.

(См. также UITableView становится инициализированным в середине viewDidLoad? , где я отправил тот же ответ.)

...