Мой «ответ» - это скорее рекомендация, чтобы вы использовали проверку источника данных вместо проверки ячейки, чтобы определить, является ли ячейка редактируемой. tableView:canEditRowAtIndexPath:
является сообщением протокола UITableViewDataSource. Причиной, по которой он является частью источника данных, является b / c, как правило, именно логика модели данных определяет, следует ли редактировать данные в конкретной ячейке. В обоих ваших примерах вы используете тип ячейки в качестве прокси для типа данных в ячейке.
Лучшая проверка была бы аналогична логике, которую вы должны использовать в tableView:cellForRowAtIndexPath:
, чтобы определить, какую ячейку использовать.
Не зная специфики модели данных, я не могу дать вам точный код, но это что-то вроде:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
return [self chatDataTypeAtIndexPath:indexPath] == ChatDataTypeMessage;
}