Xcode 11 tableview вылетает при запуске - PullRequest
0 голосов
/ 05 июня 2019

Запуск приложения, использующего просмотр таблицы, сбой симуляторов при запуске, с:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempted to call -cellForRowAtIndexPath: on the table view while it was in the process of updating its visible cells, which is not allowed.

Тот же код работал в iOS 12 / Xcode 10.2.

Комментирование выделенной функциивызов ниже решил проблему сбоя:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    updateRowHeight(indexPath: indexPath) // CRASH IS BECAUSE OF CALLING THIS HERE
    return myTableView.frame.height / CGFloat(CellsDataEnum.allCases.count)
}


func updateRowHeight(indexPath: IndexPath) { // WHICH CALLS THIS
     myTableView.cellForRow(at: indexPath)?.textLabel?.font = UIFont.systemFont(ofSize: myTableView.frame.height / 10)
    }

Вместо этого я теперь установил шрифт в cellForRowAt:

cell.textLabel?.font = UIFont.systemFont(ofSize: myTableView.frame.height / 10)

Почему первая версия работала в iOS 12, но сбой в iOS13

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

(Apple Via Feedback Assistant)

  • Это исключение является новым в iOS 13 и возникает, если вы пытаетесь попросить табличное представление вернуть ячейку, когда табличное представление находится в серединеобновления своих клеток.
  • Подробнее об этом можно узнать на форумах разработчиков здесь: https://forums.developer.apple.com/thread/117537#364166
0 голосов
/ 05 июня 2019

Нет необходимости звонить updateRowHeight с heightForRowAt. Фактически, весь метод updateRowHeight должен быть удален. Установите шрифт в cellForRowAt.

И учитывая, что ваш heightForRowAt возвращает одинаковое значение для всех строк, удалите этот метод тоже. Это очень неэффективно. Просто установите свойство rowHeight представления таблицы один раз на желаемую высоту.

Эти изменения должны работать на всех версиях iOS и быть гораздо более эффективными.

iOS 13, вероятно, имеет проблемы, потому что вы пытаетесь получить доступ к ячейке во время обновления табличного представления. Возможно, он работал в предыдущей версии, но это никогда не было хорошей идеей для доступа к cellForRowAt с heightForRowAt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...