webentwicklung-frage-antwort-db.com.de

Xcode kann eine Zelle mit Kennung nicht aus der Reihe nehmen

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: enter image description here

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.

IB

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.

37
GoldXApp

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];
}
79

Ok, Ihr Problem ist, dass Sie Static cells statt Prototype cells verwenden. Ändern Sie einfach Ihren UITableView-Inhaltstyp.

Prototype cells option

25
ssantos

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.

14
GoldXApp

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
{
}
2
serg_ov

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.

2
bilobatum

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;
}
1
Oleg Sobolev

In meinem Fall wurde das Storyboard, in dem ich die fehlende UITableViewCell definiert hatte, lokalisiert.

0
Fran Pugl

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")
0
arango_86