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:
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.
É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.
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];
}
Ok, votre problème est que vous utilisez Static cells
au lieu de Prototype cells
. Changez simplement votre type de contenu UITableView.
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.
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
{
}
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.
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.
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;
}
Dans mon cas, le Storyboard où j'avais défini le UITableViewCell manquant était localisé.
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")