ios - tutorial - uitableviewcontroller swift 4
Xcode no puede dequeuear una celda con identificador (11)
Bien, tu problema es que estás usando Static cells
, en lugar de Prototype cells
de Prototype cells
. Simplemente cambie su tipo de contenido UITableView.
mi trabajo es sobre `UITableView. Cada vez que ejecuto mi proyecto, aparece este error:
Terminating app due to uncaught exception ''NSInternalInconsistencyException'', reason: ''unable to dequeue a cell with identifier Cell1 - must register a nib or a class for the identifier or connect a prototype cell in a storyboard
Revisé cientos de veces mi identificador de celda en mi guión gráfico y en mi código son los mismos. Código (código UITableViewController
de UITableViewController
):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
return cell;
}
Imagen de las propiedades de la celda de vista de tabla:
UITableViewCell
e implementé una subclase de UITableViewCell
para mi celda.
¿Alguna idea de por qué esto no está funcionando?
De cualquier manera (línea de código) para saber cuál es el identificador de una celda?
Gracias
Editar: captura de pantalla de mi constructor de interfaz.
Editar 2: texto de customCell.h
#import <UIKit/UIKit.h>
@interface customCell : UITableViewCell
@end
Aparece un nuevo error cuando ejecuto el proyecto:
[<choixActiviteViewController 0x7591ac0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Cell1.
choixActiviteViewController es una subclase de UITableViewController y es la clase personalizada de Choix Activite View Controller.
Comente todo el código en la aplicación: didFinishLaunchingWithOptions (AppDelegate) pero siga siendo YES y vuelva a intentarlo.
El motivo de este problema es muy claro a partir de la excepción:
Una solución a este problema es registrar una clase para el identificador
En Swift esto se puede hacer de la siguiente manera
tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier")
En lugar de:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
Tratar:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
si esto no funciona, también agregue:
if (cell == nil) {
cell = [[customCell alloc] init];
}
En mi caso, el Storyboard donde había definido la falta de UITableViewCell fue localizado.
Me enfrentaba a este problema al presentar el UITableViewController que tiene una celda personalizada de otro viewcontroller. Como solución alternativa, la instalé desde el guión gráfico y eso resolvió el problema.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "YourTableViewController")
self.present(controller, animated: true, completion: nil)
Ok, mi proyecto finalmente funciona. Aparecieron algunos errores sobre cosas que he eliminado y no puedo encontrar más.
Acabo de eliminar cada TableViewCell que tuve que crear una nueva UITableViewCell
con las siguientes propiedades:
clase: customCell
Estilo: Básico (pero también funciona con Personalizado)
Identificador: Cell1
Gracias por su ayuda ssantos, Abdullah Shafique y bilobatum.
Si está utilizando intencionalmente UITableViewCells, entonces no tiene que implementar los métodos de población UITableView normales (numberOfSectionsInTableView:, tableView:numberOfRowsInSection:, tableView:cellForRowAtIndexPath:).
La UITableView se completará automáticamente desde las celdas definidas en su guión gráfico. Terminas usando tableView: cellForRowAtIndexPath: para formatear los datos en las celdas. Utiliza [super tableView: cellForRowAtIndexPath:] para obtener tableViewCell y luego ReuseIdentifier, tags o indexPath para unir la celda a los datos que la acompañan.
Si su celda de tabla es una subclase de UITableViewCell, entonces no está utilizando el estilo de celda "Básico". Cambie la configuración de estilo en el inspector de atributos a Personalizado.
Además, asegúrese de que la clase en el inspector de identidad de la celda de la tabla esté configurada en su subclase de celda de tabla personalizada.
Supongo que estás usando células estáticas. Si lo haces conscientemente, simplemente elimina los métodos de miles de tu archivo .m:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
}
intente utilizar la clase UITableViewCell
lugar de la clase UITableViewCell
.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
customCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
return cell;
}