it-swarm.com.de

ungültige Spitze für Kennung (CELLNAME) registriert - Die Spitze muss genau ein Objekt der obersten Ebene enthalten, bei dem es sich um eine UITableViewCell-Instanz handeln muss

Entschuldigung für den langen Titel, aber ich wollte, dass er von einer Google-Suche klar erkannt wird. Außerdem unterscheidet sich dies von vielen anderen ähnlichen Fragen, da hier keine 'null'-Kennung angegeben wird, sondern eine, die tatsächlich existiert.

Das Problem tritt im Wesentlichen auf, wenn Sie versuchen, mithilfe einer der Zellen in einem Tabellensicht-Controller zu einer anderen Ansicht zu navigieren (was auch immer diese Ansicht sein mag).

Die meisten Leute würden auf dieses Problem stoßen, nachdem sie das Apple-Tutorial auf der To-Do-Liste durchgesehen hatten und erwarteten, dass die Zellen unabhängig von ihrem Zweck in derselben Bewegung arbeiten. Dieses Problem ist wahrscheinlich für die meisten vereinfachend, aber für einen Anfänger ist es ziemlich schwer, ich habe ungefähr 3 Stunden gebraucht. 

Grundsätzlich ist der Fehler:

invalid nib registered for identifier (prototypeCell) - nib must contain exactly one top level object which must be a UITableViewCell instance

Wo wäre "prototypeCell", wie immer Ihre Zelle heißt. Dies ist eine Ausnahme, die sofort beim Start der App auftritt.

38
Cail Demetri

Ich hatte das gleiche Problem wie oben, aber ich habe keine Storyboards verwendet und das Problem erschien einfach aus heiterem Himmel.

Ich fand, dass die Lösung in der Tabellenzellendatei war. Ich hatte einen Uibutton hinzugefügt, der jedoch versehentlich außerhalb der Zelle angebracht worden war. Dies bedeutete, dass es fast wie ein zusätzlicher Blick in die uiview war. 

Nachdem ich es gefunden und diese zusätzliche Ansicht gelöscht hatte, verschwand das Problem sofort.

Wenn Sie diesen Fehler haben, überprüfen Sie die uitableviewcell auf zusätzliche Ansichten und versehentlich hinzugefügte Objekte

161
simon_smiley

Die Antwort von simon_smiley wies mich in die richtige Richtung, aber es war mehr Versuch und Irrtum nötig, was zu folgender Lösung führte:

Das Problem tritt nicht nur für zusätzliche UIView-Objekte der obersten Ebene auf, sondern auch für Gestenerkenner . Stellen Sie also sicher, dass Sie keine Gestenerkennungsfunktionen in Ihrer fehlerhaften XIB-Datei verwenden. Sie können sie stattdessen im Code einrichten.

Zum Beispiel können Sie dies in awakeFromNib tun, wie von vahotm in den akzeptierten Antwortkommentaren angegeben.

20
Dschee

Ich hatte das gleiche Problem! In meinem Fall war die benutzerdefinierte Zelle versehentlich die Unterklasse von UIView anstelle von UITableViewCell. Durch das Ersetzen von UIView durch UITableViewCell wurde das Problem behoben.

7
Annie

Dasselbe Problem, weil ich eine UITapGestureRecognizer in die Unteransichten von ContentView ziehen und ablegen kann. Entferne es einfach.

5
William Hu

Das Problem ist, dass sich in Ihrem Storyboard mehrere Zellen befinden, die denselben Namen haben. Bei einer einzelnen Tabellensicht gibt es mehrere Zellen, die denselben Bezeichner haben. In meinem Fall hatte ich drei Zellen, die alle als "PrototypCell" bezeichnet wurden.

Das Update ist eigentlich ganz einfach. Benennen Sie für jede Zelle einen einfachen Namen mit der Zellennummer am Ende. Diese Zellennummer muss später mit der indexPath.row übereinstimmen, also grundsätzlich mit 0 beginnen. 

Zum Beispiel:

prototypeCell0
prototypeCell1
prototypeCell2

Gehen Sie dann in die Klasse, die für den Controller verantwortlich ist, und suchen Sie die Funktion 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Dann den Code ersetzen:

static NSString *CellIdentifier = @"PrototypeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

Mit dem Code:

static NSString *CellIdentifier = @"ListPrototypeCell";
NSString* num = [NSString stringWithFormat:@"%d", indexPath.row];
NSString* actual = [CellIdentifier stringByAppendingString:num];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:actual forIndexPath:indexPath];

Alles andere kann gleich bleiben. Dieser Code erhält im Wesentlichen die Zeilennummer, fügt sie der Bezeichnerbasis hinzu und holt die Zelle aus der Tabelle, die diese Zeichenfolge verwendet. Wenn also auf eine andere Zeilennummer reagiert, wird eine andere Zelle zurückgegeben.

Nur zur Verdeutlichung ist meine gesamte Funktion für das Problem wie folgt:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ListPrototypeCell";
    NSString* num = [NSString stringWithFormat:@"%d", indexPath.row];

    NSString* actual = [CellIdentifier stringByAppendingString:num];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:actual forIndexPath:indexPath];
    cell.textLabel.text = self.content[indexPath.row];

    return cell;
}

Viel Glück!

Dies ist auch meine erste Antwort/Frage-Kombination, also habe ich wirklich keine Ahnung, wie ich an sie herangehen soll. Wenn ich also etwas falsch gemacht habe, dann sag es mir bitte und/oder ändere es .. Danke.

3
Cail Demetri

Manchmal verwenden Sie das Storyboard und haben auch collectionView und collectionView. Danach beschließen Sie, Ihr Storyboard zu vereinfachen und die Zelle in eine andere Feder zu teilen. Sie erstellen eine leere Spitze Ctrl+C aus dem Storyboard -> Ctrl+V in die Feder.

Alles sieht gut aus, aber Sie habenApp wird wegen nicht abgerufener Ausnahme 'NSInternalInconsistencyException' beendet.) Grund: 'Ungültige Spitze für Bezeichner (PrettyCollectionViewCell) registriert - Spitze muss genau ein Objekt der obersten Ebene enthalten, bei dem es sich um eine UICollectionReusableView-Instanz handeln muss'.

Ansver: mach das nicht. Nachdem ich die Spitze sauber gemacht und alle Elemente wie in Storyboard hinzugefügt habe, wurde das Problem behoben.

Scheint wie ein Fehler von xCode IB - Version 7.3.1 (7D1014) 

3
WINSergey

Ich werde meine stumme Lösung für Googler aufstellen ...

Dies war mein dummer Fehler. Als ich eine neue benutzerdefinierte Zelle für meine Tabellenansicht erstellt hatte, ging ich in das oberste Verzeichnis meines Projekts -> Neue Datei hinzufügen -> und erstellte einen leeren Dateityp unter OS X . Abschnitt und nicht der iOS Abschnitt.

Hoffentlich haben die meisten Leute das andere Problem, das oben beschrieben wurde, da es weniger peinlich ist: P

2
Ryan

Dieser Fehler ist hauptsächlich auf einige zusätzliche Ansichten zurückzuführen, die versehentlich hinzugefügt wurden. Schauen Sie sich die .xib-Datei an und überprüfen Sie, ob ungewollte zusätzliche Bilder hinzugefügt wurden. Löschen Sie das und es wird perfekt funktionieren. Sie können auf unerwünschte Ansichten prüfen, indem Sie so sieht es aus

1
2rahulsk

In meinem Fall Ich habe UITableViewHeaderFooterView subclass und XIB in different target anstelle des tatsächlichen Ziels hinzugefügt.

Stellen Sie sicher, dass das Ziel ausgeführt wird.

 enter image description here

1
Zaid Pathan

Ich hatte dieses Problem und fand schließlich heraus, dass ich eine UITableViewCell-Unterklasse anstelle einer CollectionViewCell-Unterklasse erstellt hatte. Es war Abend und ich war müde, lol. Es wurde im mng behoben.

0
ck8414

Ich löste dieses Problem, indem ich den Klassennamen im Interface Builder so einstellte, dass er mit der Zellwiederverwendungskennung (für diese Klasse) im Interface Builder übereinstimmt.

Hinweis: Ich sage nicht, dass Klasse und Bezeichner identisch sein müssen. Ich sage, dass sie die entsprechende Ansicht und das entsprechende Hintergrundmodell verknüpfen müssen.

0
Andrew Kirna

Ich habe die Ansichtsansicht der Sammlung aus einem anderen Projekt gezogen und habe diese erhalten.
'Ungültige Spitze registriert für Bezeichner (Zelle) - Die Spitze muss genau ein Objekt der obersten Ebene enthalten, bei dem es sich um eine UICollectionReusableView-Instanz' handeln muss.
Dann verglich ich die Sammlungs-Ansichtszelle von mir erstellt und fand die wiederverwendbare Ansicht fehlend. Ich hoffe das hilft.
 enter image description here

0
user1039695

Es war ein dummer Fehler auf meiner Seite und ich hatte zwei Tableview-Zellen, die diesen Fehler verursacht haben. Die andere "Tabellensichtzelle" wurde entfernt, wodurch das Problem behoben wurde.

0