#ios #swift #uitableview
#iOS #swift #uitableview
Вопрос:
Я использую файл xib для создания пользовательской ячейки. Идентификатор повторного использования настроен в файле xib. Тогда у меня есть отложенный var, который я использую для регистрации кончика только один раз:
private lazy var registerNib: Bool = {
let nib = UINib(nibName: "CustomTableViewCell", bundle: nil)
self.tableView.register(nib, forCellReuseIdentifier: "Custom")
return true
}()
Во время создания ячейки я просто использовал lazy var и удалил ячейку из очереди из табличного представления, используя тот же идентификатор повторного использования, который у меня есть в файле xib:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let _ = self.registerNib
let cell = tableView.dequeueReusableCell(withIdentifier: "Custom") as! CustomCell
return cell
}
Но развертывание завершается неудачей, и приложение выходит из строя.
TableView.dequeueReusableCell возвращает nil
по какой-то причине….
Комментарии:
1. @Sh_Khan Я не думаю, что это необходимо: причина в том, что метод удаления из очереди возвращает nil. Этого достаточно в качестве информации о сбое.
Ответ №1:
Есть два метода с именами dequeueReusableCell
.
Но развертывание завершается неудачей, и приложение выходит из строя. TableView.dequeueReusableCell по какой-то причине возвращает nil….
Вы используете первую, и в документе четко сказано
Возвращаемое значение
UITableViewCell
Объект с соответствующимidentifier
ornil
, если такой объект не существует в очереди повторно используемой ячейки.
Возможно, вы захотите использовать последнее. Измените строку:
let cell = tableView.dequeueReusableCell(withIdentifier: "Custom") as! CustomCell
Для:
let cell = tableView.dequeueReusableCell(withIdentifier: "Custom", for: indexPath) as! CustomCell
Ответ №2:
Вам необходимо зарегистрировать свой объект nib в viewDidLoad():
методе, подобном этому
let nib = UINib(nibName: "CustomTableViewCell", bundle: nil)
tableView.register(nib, forCellReuseIdentifier: "Custom")
Кроме того, вы установили идентификатор повторного использования ячейки в раскадровке?