Experimenté un problema extraño con TableViewController

*** Assertion failure in -[UITableView _dequeueReusableCellWithIdentifier:forIndexPath:usingPresentationValues:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3694.4.18/UITableView.m:7732
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

No tiene sentido mientras ingrese la descripción de la imagen aquí

El identificador está configurado correctamente.

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

Sin embargo si coloco

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

En ViewDidLoad, entonces funciona. Sin embargo, el prototipo del guión gráfico no se utilizará ni se utilizará.

En este punto no tengo idea de lo que está pasando. La clase TableViewController también está configurada correctamente.

0
user4151125 23 oct. 2017 a las 05:10

3 respuestas

La mejor respuesta

Parece que el problema estaba en la biblioteca personalizada que estaba usando para la navegación. En lugar de inicializar el controlador de vista desde el identificador del guión gráfico, inicializaba la clase directamente, por lo que el controlador de vista del guión gráfico era inútil.

Todo funciona bien ahora.

0
user4151125user4151125 23 oct. 2017 a las 17:18

Como usas TableViewCell de manera diferente, entonces estoy seguro de que también has creado una clase tableCell, como en mi caso es "CustomTableCellClass" de la siguiente manera

class CustomTableCellClass: UITableViewCell {

    weak var CategoriesDelegate: CategoriesVcDelegate?
    weak var itemsDelegate: ItemsvcDelegate?


    //MARK: Outlets of CategoriesVcTableView
    @IBOutlet weak var ProductImage: UIImageView!
    @IBOutlet weak var ProductName: UILabel!
    @IBOutlet weak var ProductPrice: UILabel!
    @IBOutlet weak var ProductStarImage: UIButton!

}

Mi declaración cellReuseIdentifier -

 let cellReuseIdentifier = "cell" 

Ahora descárgalo como

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = self.CategoriesTableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! CustomTableCellClass

    cell.CategoriesDelegate = self
    cell.ProductStarImage.tag = indexPath.row
    cell.ProductName.text = productNameArray[indexPath.row]
    cell.ProductPrice.text = productPriceArray[indexPath.row]
    cell.ProductImage.image = productImagesArray[indexPath.row]

    return cell
}

Espero que :) ayude

0
iOS Geek 23 oct. 2017 a las 04:38

Comprendí su pregunta. Solo hay una razón por la cual su vista de tabla no puede encontrar la celda registrada.

La solución es que debe verificar su código una vez más. Verifique la ortografía de su identificador tanto en el guión gráfico como en el método cellForRowAt.

Si esta solución no funciona, siga estos pasos:

  1. pegue el siguiente código en el método cellForRowAt

    let cell = tableView.dequeueReusableCell (withIdentifier: "cell", for: indexPath)

    celda de retorno

  2. Eliminar todas las celdas de tableviewcontroller del guión gráfico.

  3. Arrastre y suelte la nueva celda TableView y proporcione el identificador apropiado "celda"

  4. Construye y corre.

    Esta solución definitivamente funcionará.

0
ashish 23 oct. 2017 a las 04:37