Нет указательного пути для повторной использования ячейки таблицы.
Это началось с самого начала. Любые идеи: Код:
CUSTOMCLASSNAME (я заменил фактическое имя класса, так как оно содержит имя клиента.)
Инициализация моего tableView:
[self.tableView registerClass:[CUSTOMCLASSNAME class] forCellReuseIdentifier:[self reuseIdentifier]];
В ячейке для строки:
Привет, заголовок печатается на консоли. Это моя cellForRow:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
AVTCheckListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[self reuseIdentifier] forIndexPath:indexPath];
[self configureCell:cell atIndexPath:indexPath];
return cell;
}
- (void)configureCell:(AVTCheckListTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
ChecklistGroup *group = [self.checklistFetchedResultsController.fetchedObjects objectAtIndex:indexPath.section];
ChecklistItem *item = [self getChecklistItemForIndexPath:indexPath];
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
[[cell cellTextView] setAttributedText:[[item checked] boolValue] ? [[NSAttributedString alloc] initWithString:[item name] attributes:@{ NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle) } ] : [[NSAttributedString alloc] initWithString:[item name]]];
[[cell cellTextView] setUserInteractionEnabled:[[group isUserDefined] boolValue]];
[[cell cellTextView] setTag:indexPath.row];
[[cell cellTextView] setDelegate:self];
[[cell tickImage] setHidden:![[item checked] boolValue]];
}
//Method that returns re-use:
- (NSString *) reuseIdentifier {
return @"CheckListTableView";
}
Ответы
Ответ 1
Я проработал это через несколько дней. В моей пользовательской ячейке у меня был textView, когда я добавлял его в contentView, я делал это:
[self.cellTextView setClearsOnInsertion:YES];
Это стало причиной проблемы; если кто-то еще имеет подобную проблему.
Счастливое кодирование: -)
Ответ 2
Верните [cell contentView]
вместо cell
из tableView:viewForHeaderInSection:
РЕДАКТИРОВАТЬ: Это как-то привело к сбоям при длительных нажатиях на кнопках пользовательского интерфейса. Чтобы исправить это, я сдался и использовал другой раздел с одним элементом в качестве заголовка поддельного раздела.
Ответ 3
Я нашел это предупреждение во время реализации viewForHeaderInSection
.
Это мое решение в Swift 2.x:
let headerView = self.tableView.dequeueReusableCellWithIdentifier("MyCell") as! MyCell
let containerView = UIView(frame:headerView.frame)
headerView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
headerView.myLabel.text = "section title 1"
containerView.addSubview(headerView)
return containerView
Это версия Swift 3:
let headerView = self.tableView.dequeueReusableCell(withIdentifier: "MyCell") as! MyCell
let containerView = UIView(frame:headerView.frame)
headerView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
headerView.myLabel.text = "section title 1"
containerView.addSubview(headerView)
return containerView
Ответ 4
Я только что обнаружил причину этого сообщения об ошибке.
A UITableViewCell
использовался как обычный вид. Поэтому его 'indexPath
не был установлен. В нашем случае один возвращался viewForHeaderInSection
:
Надеюсь, что это поможет.
Крис
Ответ 5
В моем случае эта ошибка была представлена только на iPhone (а не iPad), потому что я разместил [self.tableView beginUpdates];
и позже [self.tableView endUpdates];
внутри [UIView transitionWithView:duration:options:animations:compeletion];
. Чтобы исправить это, я просто удалил начальные/конечные обновления, так как я предпочел затухающую анимацию вместо выцветания, а также анимацию изменений высоты ячейки.
Ответ 6
Хорошо, я просто использовал большую часть дня, пытаясь понять это, поэтому, надеюсь, это альтернативное объяснение спасает кого-то еще некоторое время.
У меня был табличный вид, который иногда отправлял это сообщение при загрузке. Это оказалось вызвано уведомлениями KVO для объектов объектов Core Data, когда загрузка была загружена. (При наблюдении за изменением мой контроллер попытался вызвать reloadData в рассматриваемом представлении таблицы. Исправлено, не наблюдая объекты до тех пор, пока представление не закончило загрузку (ранее я начал наблюдать объект, как только он был назначен через accessor)
TL;DR: проверьте, можете ли вы пытаться перезагрузить данные из чего-то другого, кроме основного.
ДАЖЕ ЛУЧШЕ:
Это проблема, с которой вы не столкнетесь, если вы (как я обнаружил, вам действительно нужно) использовать контексты объектов, управляемых дочерними элементами, и только слияние изменений обратно в ваш основной MOC на основной поток в разумные времена.
Ответ 7
Если вы используете ячейку для заголовка раздела заголовка, вы должны поместить ее в контейнер и затем вернуть представление контейнера, чтобы предотвратить "отсутствие указательного пути для использования ячейки таблицы". Пример кода, как показано ниже.
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
CustomerCellHeader *headerViewCell = [tableView dequeueReusableCellWithIdentifier:kCustomerCellHeaderIdentifier];
headerView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[headerView addSubview:headerViewCell];
return headerView;
}
Ответ 8
У меня возникли проблемы с возвратом UITableViewCell
в tableView:viewForHeaderInSection
, но возврат [cell contentView]
вызывало сбой всех кнопок внутри ячейки, а установка обертки представления вокруг ячейки казалась расточительной. Вместо этого я изменил класс UITableViewCell
на UITableViewHeaderFooterView
, и он работал как шарм!
Если у вас возникла эта проблема:
Установка цвета фона в UITableViewHeaderFooterView устарела. Вместо этого используйте contentView.backgroundColor.
Не забудьте изменить цвет фона на вашем значке по умолчанию.
Ответ 9
У меня была такая же проблема. Это сообщение появляется, когда я прокручиваю и ячейки повторно используются.
Многие ответы говорили о viewForHeaderInSection, но я их не использовал. Если у кого-то есть аналогичная проблема, я настоящим подтверждаю свое решение.
Я добавил наблюдателя в текстовые поля внутри каждой ячейки. Интересно, является ли это наблюдателем причиной этой проблемы, поскольку я не удалял наблюдателей, когда ячейка перерабатывается.
Итак, я удалил наблюдателя, когда ячейка деинирована.
Кажется, проблема решена. Я не могу гарантировать.
Ответ 10
Это помогло мне в быстрой 2.1
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
let headerCell:SBCollapsableTableViewHeader = self.friendsInfoTableView.dequeueReusableCellWithIdentifier("HeaderCell") as! SBCollapsableTableViewHeader
let containerView = UIView(frame:headerCell.frame)
headerCell.delegate = self
headerCell.titleLabel.font = UIFont.boldSystemFontOfSize(15)
headerCell.titleLabel.text = "\(self.ObjectArray[section].sectioName)"
headerCell.collapsedIndicatorLabel.text = collapsed ? "+" : "-"
headerCell.tag = section
headerCell.backgroundColor = UIColor(red:72/255,green:141/255,blue:200/255,alpha:0.9)
containerView.addSubview(headerCell)
return containerView
}
Ответ 11
Я получил ту же ошибку, но по другой причине.
У меня был пользовательский UITableViewCell, который установил один из UITextField, чтобы стать FirstResponder. Ошибка возникла, когда было возвращено несколько экземпляров этой настраиваемой ячейки.
Я просто установил только первый экземпляр пользовательской ячейки, чтобы стать FirstResponder, и он решил проблему.
Ответ 12
В моем случае (довольно глупо) я использовал синтаксис if let
внутри cellForRowAt
так:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "carCell", for:
indexPath) as? carTableViewCell {
// Did some stuff here
return CarTableViewCell()
else {
return CarTableViewCell()
}
}
Как вы можете видеть, я возвратил мне универсальный carTableViewCell(), и это то, что дало мне эту презренную ошибку...
Я надеюсь, что это когда-нибудь поможет кому-то, ха-ха (
Удачного кодирования!
Ответ 13
можете ли вы попробовать следующее (если у вас нет какой-либо конкретной конфигурации для ячейки в этом пути): -
CustomClassName *cell=[tableView dequeueReusableCellWithIdentifier:[self reuseIdentifier]];
if(cell==nil)
{
cell=[[CustomClassName alloc] initWithStyle:whatever_style reuseIdentifer:[self reuseIdentifier]];
}
Также сообщите, какую ошибку вы получаете, если выше не работает.
Также посмотрите на следующую ссылку: -
В чем смысл "нет пути указателя для повторной использования ячейки таблицы" сообщение в iOS 6/7?