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 awakeFromNib
zoals 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 UITapGestureRecognizer
naar de subviews van ContentView
sleep 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.
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+C
van storyboard -> Ctrl+V
in 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 UITableViewHeaderFooterView
subklasse en XIB
toegevoegd in ander doelin plaats van het werkelijke doel.
Zorg ervoor dat het in het lopende doel staat.
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.
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.