in meiner Arbeit geht es um UITableView. Bei jeder Ausführung meines Projekts wird dieser Fehler angezeigt:
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
Ich habe hundertmal meine Zellkennung in meinem Storyboard überprüft und in meinem Code ist der gleiche . Code (defaut code von UITableViewController
)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell1";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
return cell;
}
Eigenschaften der Zellen der Tabellensicht:
Ich habe eine Unterklasse von UITableViewCell
für meine Zelle erstellt und implementiert.
Irgendeine Idee, warum das nicht funktioniert?
Gibt es eine Möglichkeit (Codezeile), zu wissen, wie der Bezeichner einer Zelle ist?
Vielen Dank
Edit: Screenshot von meinem Interface Builder.
Edit 2: Text von customCell.h
#import <UIKit/UIKit.h>
@interface customCell : UITableViewCell
@end
Beim Ausführen des Projekts wird ein neuer Fehler angezeigt:
[<choixActiviteViewController 0x7591ac0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Cell1.
choixActiviteViewController ist eine Unterklasse von UITableViewController und ist die benutzerdefinierte Klasse von Choix Activite View Controller.
Anstatt:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
Versuchen:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
wenn dies nicht funktioniert, fügen Sie auch Folgendes hinzu:
if (cell == nil) {
cell = [[customCell alloc] init];
}
Ok, Ihr Problem ist, dass Sie Static cells
statt Prototype cells
verwenden. Ändern Sie einfach Ihren UITableView-Inhaltstyp.
Ok, mein Projekt funktioniert endlich. Es wurden einige Fehler in Bezug auf Dinge angezeigt, die ich gelöscht habe und die ich nicht mehr finden kann.
Ich habe gerade jede TableViewCell gelöscht, die ich erstellt habe, um ein neues eindeutiges UITableViewCell
mit den folgenden Eigenschaften zu erstellen:
klasse: customCell
Style: Basic (funktioniert aber auch mit Custom)
Kennung: Cell1
Vielen Dank für Ihre Hilfe, Ssantos, Abdullah Shafique und Bilobatum.
Ich nehme an, Sie verwenden statische Zellen. Wenn Sie dies bewusst tun, löschen Sie einfach tausend Methoden aus Ihrer .m-Datei:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
}
Wenn Ihre Tabellenzelle eine Unterklasse von UITableViewCell ist, verwenden Sie nicht den "Basic" -Stil der Zelle. Ändern Sie die Stileinstellung im Attribut-Inspector in Benutzerdefiniert.
Stellen Sie außerdem sicher, dass für die Klasse im Identitätsinspektor der Tabellenzelle Ihre benutzerdefinierte Unterkategorie für Tabellenzellen festgelegt ist.
Wenn Sie statische UITableViewCells absichtlich verwenden, müssen Sie die normalen UITableView-Populationsmethoden nicht implementieren. (numberOfSectionsInTableView:, tableView:numberOfRowsInSection:, tableView:cellForRowAtIndexPath:).
Die UITableView wird automatisch aus den in Ihrem Storyboard definierten Zellen ausgefüllt. Am Ende verwenden Sie tableView: cellForRowAtIndexPath:, um die Daten in den Zellen zu formatieren. Sie verwenden [super tableView: cellForRowAtIndexPath:], um tableViewCell und dann ReuseIdentifier, Tags oder indexPath abzurufen, um die Zelle mit den zugehörigen Daten abzugleichen.
verwenden Sie stattdessen customCell
class 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;
}
In meinem Fall wurde das Storyboard, in dem ich die fehlende UITableViewCell definiert hatte, lokalisiert.
Der Grund für dieses Problem ergibt sich aus der Ausnahme:
Eine Lösung für dieses Problem ist Eine Klasse für den Bezeichner registrieren
In Swift kann dies wie folgt durchgeführt werden
tableView.registerClass(UITableViewCell.classForKeyedArchiver(), forCellReuseIdentifier: "your_reuse_identifier")