Общая ошибка заключается в том, что вы гарантируете, что объект ячейки будет возвращен из .dequeueReusableCell ().Скорее всего, будут выполнены все предварительные условия, но в вашем случае вы получите дополнительную ссылку.(Рассматривайте его как возможную ссылку NULL, если это новое.) Возможно, ваша ячейка не имеет правильного идентификатора, установленного в StoryBoard.
Каждая ячейка в StoryBoard должна знать свой идентификатор, потому что этот идентификатор используется дляпоищи это.Проверьте, введен ли он в свойствах.(См. Снимок экрана, чтобы увидеть, где)
Другая ловушка предполагает, что вы всегда получаете ячейку, где интерфейс сообщает вам, что она необязательна.Но делегат требует, чтобы вы всегда возвращали объект, поэтому вы идете и предоставляете его, используя «!».Большую часть времени вы получаете камеру, но опечатки случаются.Хороший способ работы со Swift - избегать!и используйте?.
Например, вы можете обработать ячейку следующим образом:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let demoCell:DemoCell = tableView.dequeueReusableCell(withIdentifier: DEMO_CELL_ID) as? DemoCell // This is line 166
demoCell?.selectionStyle = .none
let items = arrSections[indexPath.section].items[indexPath.row]
if items["name"] as! String == "country"{
demoCell?.lblCountry.isHidden = false
}
return demoCell ?? UITableViewCell()
}
Если demoCell равен NULL, тогда создайте пустую базовую ячейку и верните ее.Не результат пользовательского интерфейса вы хотите, но и без сбоев.Теперь вы можете посмотреть, почему клетка не отключилась, как ожидалось.Большую часть времени получить клетку не составит труда, если что-то не так.