Nib должен содержать ровно один объект верхнего уровня, который должен быть экземпляром UITableViewCell.Работает в других UITableViews - PullRequest
1 голос
/ 23 сентября 2019

У меня есть UITableViewCell, который я написал в отдельном файле .xib, для использования в паре разных UITableViews.Все TableViews наследуются от класса, который регистрирует UINib для использования с идентификатором «SpecialCell».

Для всех, кроме одного из TableViews, ячейка отключается и работает нормально.Однако для одного из них я получаю эту ошибку:

*** Ошибка подтверждения в - [app.MyTableView _dequeueReusableViewOfType: withIdentifier:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-3899.13.13/UITableView.m:8546

*** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «для идентификатора (SpecialCell) зарегистрирован неверный перо - перо должно содержать ровно один верхний уровеньобъект, который должен быть экземпляром UITableViewCell '

Я удаляю ячейку с тем же кодом, что и в других TableView, и не могу понять, почему эта проблема возникает только в одном из ViewControllers.

Я видел несколько ответов, относящихся к одному и тому же сообщению, но ни один из них здесь не подходит.Не существует никаких посторонних объектов верхнего уровня (и поскольку ячейка загружается отлично в других ViewControllers, тогда я не думаю, что это может быть основной проблемой).

Это код, который я использую(то же самое в каждом ViewController) для удаления очереди из ячейки.

guard let cell = tableView.dequeueReusableCell(withIdentifier: "SpecialCell", for: indexPath) as? SpecialCell else {
    print("can't load SpecialCell")
    return UITableViewCell()
}
return cell

(для чего это стоит, оператор печати в этом предложении else не запускается).

Если у кого-либо есть какой-либоподсказки о том, в чем может быть проблема, я бы очень признателен!

Редактировать: Изображение пера SpecialCell по запросу

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Почему у вас есть ticketView?Я имею в виду, что уже есть вид.Попробуйте удалить этот тикл.Также в viewDidLoad зарегистрируйтесь так: tableView.registerNib(UINib(nibName: "cellName", bundle: nil), forCellReuseIdentifier: "cellIdentifier")

0 голосов
/ 23 сентября 2019

Не рекомендуется использовать один и тот же идентификатор повторного использования среди разных классов.Каждый раз, когда вы используете ячейку TableView внутри TableView, регистрируйте ее с уникальным идентификатором.Это облегчает iOS для идентификации вашей ячейки.Даже в doc они указали, что если вы повторно используете тот же идентификатор, старая регистрация станет недействительной.

Если вы ранее зарегистрировали файл класса или пера с тем же идентификатором повторного использования, то перо, указанное в полеПараметр nib заменяет старую запись.Вы можете указать nil для nib, если хотите отменить регистрацию nib по указанному идентификатору повторного использования.

Docs

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