ongeldige penpunt geregistreerd voor identifier (CELLNAME) – penpunt moet precies één object op het hoogste niveau bevatten dat een UITableViewCell-instantie moet zijn

Sorry voor de lange titel, maar ik wilde dat deze duidelijk zichtbaar was bij een zoekopdracht op Google.
Dit verschilt ook van veel van de andere soortgelijke vragen hier, omdat het geen ‘null’-ID specificeert, maar een die daadwerkelijk bestaat.

In wezen doet het probleem zich voor wanneer u probeert te navigeren met behulp van een van de cellen in een tabelweergavecontroller om over te gaan naar een andere weergave (wat die weergave ook mag zijn).

De meeste mensen zouden tegen dit probleem aanlopen nadat ze de Apple-tutorial op de ‘To-Do List’ hadden doorlopen en verwachtten dat de cellen in dezelfde beweging zouden werken, ongeacht hun doel.
Dit probleem is waarschijnlijk simplistisch voor de meesten, maar voor een beginner is het vrij moeilijk, het kostte me ongeveer 3 uur.

De fout is eigenlijk:

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

Waar ‘prototypeCell’ zou zijn, hoe je cel ook heet. Dit is een uitzondering die onmiddellijk optreedt wanneer de app wordt gestart.


Antwoord 1, autoriteit 100%

Ik had hetzelfde probleem als hierboven, maar ik gebruikte geen storyboards en het probleem kwam zomaar uit het niets.

Ik ontdekte dat de oplossing in het tableview-celbestand stond. Ik had een ui-knop toegevoegd, maar deze was per ongeluk buiten de grenzen van de cel toegevoegd. Dit betekende dat het bijna een extra weergave was in de uiview.

Toen ik het eenmaal vond en deze extra weergave verwijderde, verdween het probleem onmiddellijk.

Als je deze fout hebt, controleer dan de uitableviewcell voor extra views en objecten die per ongeluk zijn toegevoegd


Antwoord 2, autoriteit 14%

Het antwoord van simon_smiley wees me in de goede richting, maar er was wat meer trial-and-error nodig om tot de volgende oplossing te komen:

Het probleem doet zich niet alleen voor bij extra UIView-objecten op het hoogste niveau, maar ook bij gebaarherkenners. Zorg er dus voor dat u geen gebarenherkenners gebruikt in uw falende XIB-bestand, u kunt ze in plaats daarvan in code instellen.

Je kunt het bijvoorbeeld doen in awakeFromNibzoals opgemerkt door vahotm in de geaccepteerde reacties.


Antwoord 3, autoriteit 3%

Ik had hetzelfde probleem! En in mijn geval was de aangepaste cel per ongeluk de subklasse van UIView in plaats van UITableViewCell. Dus het vervangen van UIView door UITableViewCell loste het probleem op!


Antwoord 4, autoriteit 3%

Hetzelfde probleem omdat ik een UITapGestureRecognizernaar de subviews van ContentViewsleep en neerzet. Verwijder het gewoon.


Antwoord 5, autoriteit 3%

In mijn geval had ik per ongeluk een extra ImageView in de xib toegevoegd. Verwijderd en alles werkte perfect.

voer hier de afbeeldingsbeschrijving in


Antwoord 6

Het probleem is dat er meerdere cellen in je storyboard zijn met dezelfde naam. Zoals voor een enkele tabelweergave, zijn er meerdere cellen met dezelfde identifier. In mijn geval had ik drie cellen die allemaal ‘prototypeCell’ werden genoemd.

De oplossing is eigenlijk vrij eenvoudig. Geef voor elke cel een eenvoudige naam met het celnummer aan het einde. Dit celnummer moet later overeenkomen met indexPath.row, dus begin in principe vanaf 0.

Bijvoorbeeld:

prototypeCell0
prototypeCell1
prototypeCell2

Ga dan naar de klasse die verantwoordelijk is voor de controller, en zoek de functie

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

Vervang vervolgens de code:

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

Met de code:

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

Al het andere kan hetzelfde blijven. Deze code krijgt in feite het rijnummer, voegt het toe aan de identificatiebasis en haalt de cel uit de tabel met behulp van die string. Dus als het reageert op een ander rijnummer, retourneert het een andere cel.

Ter verduidelijking, mijn hele functie voor het probleem is als volgt:

- (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;
}

Veel succes!

Dit is ook mijn eerste antwoord/vraag-combinatie, dus ik heb echt geen idee hoe ik het moet aanpakken, dus als ik iets verkeerd heb gedaan, vertel het me dan en/of verander het.
Bedankt!


Antwoord 7

Ik zal mijn stomme oplossing aanbieden in het belang van googlers…

Dit was mijn persoonlijke domme fout – toen ik een nieuwe aangepaste cel voor mijn tabelweergave maakte, ging ik naar de map op het hoogste niveau van mijn project -> nieuw bestand toevoegen -> en een Leeg bestandstype gemaakt onder de sectie OS Xin plaats van de sectie iOS.

Hopelijk hebben de meeste mensen het andere hierboven beschreven probleem, omdat het minder gênant is 😛


Antwoord 8

Soms gebruik je storyboard en heb je collectionView erin en collectionView ook. Daarna besluit je om je Storyboard te vereenvoudigen en de cel in een andere punt te verdelen. U maakt een lege punt, Ctrl+Cvan storyboard -> Ctrl+Vin punt.

Alles ziet er goed uit, maar je hebt Beëindiging van app vanwege niet-afgevangen uitzondering ‘NSInternalInconsistencyException’, reden: ‘ongeldige punt geregistreerd voor identifier (PrettyCollectionViewCell) – punt moet precies één object op het hoogste niveau bevatten dat moet zijn een UICollectionReusableView-instantie’

Antwoord: doe dit niet. Nadat ik de punt heb schoongemaakt en alle elementen heb toegevoegd zoals ik in Storyboard heb gedaan, is het opgelost.

Lijkt op Bug van xCode IB – Versie 7.3.1 (7D1014)


Antwoord 9

Deze fout is voornamelijk te wijten aan enkele extra weergaven die per ongeluk zijn toegevoegd. Kijk eens in het .xib-bestand en controleer op extra ongewenste weergave die per ongeluk is toegevoegd. Verwijder dat en het zal perfect werken. U kunt controleren op ongewenste weergaven door zo ziet het eruit


Antwoord 10

In mijn geval,
Ik heb UITableViewHeaderFooterViewsubklasse en XIBtoegevoegd in ander doelin plaats van het werkelijke doel.

Zorg ervoor dat het in het lopende doel staat.

voer hier de afbeeldingsbeschrijving in


Antwoord 11

Ik heb dit opgelost door de klassenaam in interfacebuilder zo in te stellen dat deze overeenkomt met de celhergebruik-ID (voor die klasse) in interfacebuilder.

Opmerking: ik zeg niet dat de klasse en identifier hetzelfde moeten zijn. Ik zeg dat ze de bijbehorende weergave en het ondersteuningsmodel moeten koppelen.


Antwoord 12

Ik had dit probleem, kwam er uiteindelijk achter dat ik de subklasse UITableViewCell had gemaakt in plaats van de subklasse CollectionViewCell. het was avond en ik was moe, lol. Vast in de mng.


Antwoord 13

Ik heb de cel van de collectieweergave uit een ander project gesleept en kreeg dit.
‘ongeldige nib geregistreerd voor identifier (cel) – nib moet exact één object op het hoogste niveau bevatten dat een UICollectionReusableView-instantie moet zijn’.
Vervolgens vergeleek ik de verzamelingsweergavecel van mijn ik en ontdekte dat de herbruikbare weergave ontbrak. Ik hoop dat dit helpt.
voer hier de afbeeldingsbeschrijving in


Antwoord 14

Het was een domme fout van mijn kant en ik had twee tableview-cellen die deze fout veroorzaakten. De andere ‘tabelweergavecel’ verwijderd die het probleem oploste.

Other episodes