Не удалось загрузить пользовательскую ячейку из удаляемой повторно используемой UITableViewCell

#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 or nil , если такой объект не существует в очереди повторно используемой ячейки.


Возможно, вы захотите использовать последнее. Измените строку:

 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")
  

Кроме того, вы установили идентификатор повторного использования ячейки в раскадровке?