web-dev-qa-db-fra.com

Xcode incapable de retirer de la file d'attente une cellule avec un identifiant

mon travail concerne `UITableView. Chaque fois que je lance mon projet, cette erreur apparaît:

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

J'ai vérifié cent fois mon identifiant de cellule dans mon storyboard et dans mon code sont identiques .. Code. (Code par défaut 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;
}

Image des propriétés de la cellule de vue tableau: enter image description here

J'ai créé et mis en œuvre une sous-classe de UITableViewCell pour ma cellule.

Une idée pourquoi cela ne fonctionne pas?

Tout moyen (ligne de code) de savoir quel est l'identifiant d'une cellule?

Merci

Edit: Capture d'écran de mon constructeur d'interface.

IB

Éditer 2: Texte de customCell.h

#import <UIKit/UIKit.h>

@interface customCell : UITableViewCell

@end

Une nouvelle erreur apparaît lorsque j'exécute le projet:

[<choixActiviteViewController 0x7591ac0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Cell1.

choixActiviteViewController est une sous-classe de UITableViewController et constitue la classe personnalisée de Choix Activite View Controller.

37
GoldXApp

Au lieu de:

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

Essayer: 

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

si cela ne fonctionne pas, ajoutez aussi:

  if (cell == nil) {
    cell = [[customCell alloc] init];
}
79
Abdullah Shafique

Ok, votre problème est que vous utilisez Static cells au lieu de Prototype cells. Changez simplement votre type de contenu UITableView.

Prototype cells option

25
ssantos

Ok, mon projet fonctionne enfin. Des erreurs sont apparues à propos de choses que j'ai supprimées et que je ne trouve plus.

Je viens de supprimer chaque TableViewCell que je devais créer un nouveau UITableViewCell unique avec les propriétés suivantes:

classe: customCell

Style: Basic (mais cela fonctionne aussi avec Custom)

Identifiant: Cell1

Merci pour votre aide, ssantos, Abdullah Shafique et bilobatum.

14
GoldXApp

Je suppose que vous utilisez des cellules statiques. Si vous le faites consciemment, supprimez simplement mille méthodes de votre fichier .m:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
}
2
serg_ov

Si votre cellule de tableau est une sous-classe de UITableViewCell, vous n'utilisez pas le style de cellule "Basique". Définissez le paramètre de style dans l'inspecteur d'attributs sur Personnalisé. 

Assurez-vous également que l'inspecteur Identité de la classe de la cellule de la table est défini sur votre sous-classe de cellule de tableau personnalisée.

2
bilobatum

Si vous utilisez intentionnellement Static UITableViewCells, vous n'avez pas à implémenter les méthodes de population UITableView normales (numberOfSectionsInTableView:, tableView:numberOfRowsInSection:, tableView:cellForRowAtIndexPath:).
UITableView sera automatiquement renseigné à partir des cellules définies dans votre storyboard. Vous finissez par utiliser la tableView: cellForRowAtIndexPath: afin de formater les données dans les cellules. Vous utilisez [super tableView: cellForRowAtIndexPath:] pour obtenir les propriétés tableViewView, puis ReuseIdentifier, tags ou indexPath afin de faire correspondre la cellule aux données qui l'accompagnent.

1

essayez d'utiliser customCell class à la place de UITableViewCell class.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
customCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

return cell;
}
1
Oleg Sobolev

Dans mon cas, le Storyboard où j'avais défini le UITableViewCell manquant était localisé.

0
Fran Pugl

La raison de ce problème est très claire de l'exception:

Une solution à ce problème est Enregistrer une classe pour l'identifiant

Dans Swift, cela peut être fait comme suit

tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier")
0
arango_86