Ошибка несовместимости ячеек с searchDisplayController в Objective- C - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь реализовать searchDisplayController для табличного представления в Objective- C.

Табличное представление, которое использует прототип пользовательской ячейки, загружает и отображает пользовательский штраф ячейки. Тем не менее, когда я go для поиска, я получаю:

NSInternalInconsistencyException ', причина:' невозможно заблокировать ячейку с идентификатором Cell - необходимо зарегистрировать nib или класс для идентификатора или подключить прототип ячейка в раскадровке '

Основываясь на довольно обширных ответах SO на проблемы этого типа, основные причины этого выглядят следующим образом: 1) либо вы не определили идентификатор ячейки в раскадровке, либо, наоборот, зарегистрировали ячейку в коде, 2) вам нужно очистить проект или 3) если вы создали идентификатор в раскадровке, вы не загрузили ViewController из его раскадровки, а каким-то другим способом, и, следовательно, идентификатор ячейки не был создан и распознан .

В моем случае, однако, обычный просмотр таблицы работает нормально. Это просто searchDisplayController, который вызывает ошибку. Кроме того, если я регистрирую ячейку tableview в коде для searchDisplayController, то я не получаю эту ошибку, и searchDisplayController появляется, но пусто - я думаю, потому что в нем отображаются разные ячейки (созданные в коде), чем ячейка, созданная в раскадровке, которая имеет правильные выходы.

Я очистил проект. Тем не менее, у меня есть ощущение, что что-то облажалось в раскадровке в какой-то момент, но мне не хочется перестраивать viewcontroller и searchDisplayController. Что бы это ни стоило, V C находится в своей собственной раскадровке, но загружается через сеанс раскадровки из основной раскадровки.

cellForRow кажется стандартным:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *cellIdentifier = @"Cell";
    itemCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    if (!cell) {
        cell = [[myCell alloc] initWithStyle:UITableViewCellStyleDefault
                                 reuseIdentifier:cellIdentifier];
    }
    NSUInteger row = [indexPath row];

     if (tableView == self.searchDisplayController.searchResultsTableView) {

     self.item = [searchResults objectAtIndex:row];

     } else {

     self.item = [myItems objectAtIndex:row];
     }


    [self configureCell:cell withItem:self.item];

    return cell;
}

Тот факт, что обычный нагрузка tableview правильно предполагает, что tableview правильно подключен Что еще я могу попробовать.

...