Donc je faisais un lecteur rss pour mon école et finissais le code. J'ai exécuté le test et cela m'a donné cette erreur. Voici le code auquel il fait référence:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier
forIndexPath:indexPath];
if (cell == nil) {
cell =
[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
}
voici l'erreur dans la sortie:
2012-10-04 20: 13: 05.356 Reader [4390: c07] * Échec d'assertion dans - [UITableView dequeueReusableCellWithIdentifier: forIndexPath:], /SourceCache/UIKit_Sim/UIKit-2372/UITableView.m:4460 2012-10-04 20:: 13: 05.357 Reader [4390: c07] * Arrêt de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException', raison: 'impossible de retirer une cellule avec l'identifiant Cell - doit enregistrer une plume ou une classe pour l'identifiant ou connecter une cellule prototype dans un storyboard ' * pile premier appel de lancer: (0x1c91012 0x10cee7e 0x1c90e78 0xb64f35 0xc7d14 0x39ff 0xd0f4b 0xd101f 0xb980b 0xca19b 0x6692d 0x10e26b0 0x228dfc0 0x228233c 0x228deaf 0x1058cd 0x4e1a6 0x4ccbf 0x4cbd9 0x4be34 0x4bc6e 0x4ca29 0x4f922 0xf9fec 0x46bc4 0x47311 0x2cf3 0x137b7 0x13da7 0x14fab 0x26315 0x2724b 0x18cf8 0x1becdf9 0x1becad0 0x1c06bf5 0x1c06962 0x1c37bb6 0x1c36f44 0x1c36e1b 0x147da 0x1665c 0x2a02 0x2935 ) libc ++ abi.dylib: terminate appelé levant une exception
et voici le code qu'il affiche dans l'écran d'erreur:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
s'il vous plaît, aidez!
la source
Réponses:
Vous utilisez la
dequeueReusableCellWithIdentifier:forIndexPath:
méthode. La documentation de cette méthode dit ceci:Vous n'avez pas enregistré de nib ou de classe pour l'identifiant de réutilisation
"Cell"
.En regardant votre code, vous semblez vous attendre à ce que la méthode de dequeue revienne
nil
si elle n'a pas de cellule à vous donner. Vous devez utiliser ledequeueReusableCellWithIdentifier:
pour ce comportement:Notez cela
dequeueReusableCellWithIdentifier:
et cedequeueReusableCellWithIdentifier:forIndexPath:
sont des méthodes différentes. Voir le doc pour le premier et le dernier .Si vous voulez comprendre pourquoi vous voudriez jamais l'utiliser
dequeueReusableCellWithIdentifier:forIndexPath:
, consultez cette Q&R .la source
dequeueReusableCellWithIdentifer:forIndexPath:
(introduit dans iOS6) est une belle amélioration, car vous n'avez pas besoin de vérifier si la cellule est nulle. (Fonctionne donc de manièreUITableViewController
similaire àUICollectionView
) Mais oui, ennuyeux que cette modification ne soit pas un commentaire dans le modèle et que le message d'assertion / crash ne soit pas plus utile.dequeueReusableCellWithIdentifier:forIndexPath:
quand j'aurais dû utiliserdequeueReusableCellWithIdentifier:
.Je pense que cette erreur concerne l'enregistrement de votre nib ou classe pour l'identifiant.
Afin que vous puissiez conserver ce que vous faites dans votre fonction tableView: cellForRowAtIndexPath et simplement ajouter du code ci-dessous dans votre viewDidLoad:
Ça a marché pour moi. J'espère que cela peut aider.
la source
viewDidLoad
et le déplacement de cette logique pour laviewDidAppear
corriger.Bien que cette question soit assez ancienne, il existe une autre possibilité: si vous utilisez des storyboards, il vous suffit de définir le CellIdentifier dans le storyboard.
Donc, si votre CellIdentifier est "Cell", définissez simplement la propriété "Identifier":
Assurez-vous de nettoyer votre build après l'avoir fait. XCode a parfois quelques problèmes avec les mises à jour du Storyboard
la source
Identifier
propriété. Merci!j'ai eu le même problème en remplaçant par
résolu
la source
Le problème est probablement dû au fait que vous configurez la personnalisation
UITableViewCell
dans le storyboard mais que vous n'utilisez pas le storyboard pour instancier votreUITableViewController
qui l'utiliseUITableViewCell
. Par exemple, dans MainStoryboard, vous avez uneUITableViewController
sous - classe appeléeMyTableViewController
et une dynamique personnaliséeUITableViewCell
appeléeMyTableViewCell
avec l'identifiant id "MyCell".Si vous créez votre personnalisé
UITableViewController
comme ceci:Il n'enregistrera pas automatiquement votre cellule de visualisation personnalisée pour vous. Vous devez l'enregistrer manuellement.
Mais si vous utilisez le storyboard pour instancier
MyTableViewController
, comme ceci:Une bonne chose arrive!
UITableViewController
enregistrera automatiquement votre cellule de vue de table personnalisée que vous définissez dans le storyboard pour vous.Dans votre méthode déléguée "cellForRowAtIndexPath", vous pouvez créer votre cellule de vue de table comme ceci:
dequeueReusableCellWithIdentifier créera automatiquement une nouvelle cellule pour vous s'il n'y a pas de cellule réutilisable disponible dans la file d'attente de recyclage.
Alors vous avez terminé!
la source
instantiateViewControllerWithIdentifier
pour lancer mon viewController m'a sauvé la journée!J'ajouterai simplement que Xcode 4.5 inclut le nouveau
dequeueReusableCellWithIdentifier:forIndexPath:
dans son code de modèle par défaut - un piège potentiel pour les développeurs qui attendent l'ancienne
dequeueReusableCellWithIdentifier:
méthode.la source
Dans votre storyboard, vous devez définir «l'identifiant» de votre cellule prototype pour qu'il soit le même que votre «cellule» CellReuseIdentifier. Ensuite, vous n'obtiendrez pas ce message ou vous n'aurez pas besoin d'appeler cette fonction registerClass :.
la source
Solution Swift 2.0:
Vous devez aller dans votre inspecteur d'attributs et ajouter un nom pour votre identifiant de cellules:
Ensuite, vous devez faire correspondre votre identifiant avec votre file d'attente comme ceci:
Alternativement
Si vous travaillez avec une pointe, vous devrez peut-être enregistrer votre classe dans votre cellForRowAtIndexPath:
La référence de classe UITableView d'Apples indique:
Voici le code du framework Apples Swift 2.0:
la source
SwitchCell.self
vient?UITableViewCell.self
semble fonctionner pour moi. Peut-être ajouter une note dans la réponseSi vous utilisez des cellules statiques personnalisées, commentez simplement cette méthode:
et attribuez aux cellules un identifiant dans "Inspecteur des attributs" dans le storyboard.
la source
Je vous donne la réponse à la fois dans l'objectif C et Swift. Avant cela, je veux dire
Nous ajoutons donc
registerNib:forCellReuseIdentifier: or registerClass:forCellReuseIdentifier:
dans la méthode viewDidLoad, nous devons enregistrer la cellule
Objectif c
OPTION 1:
OPTION 2:
dans le code ci-dessus,
nibWithNibName:@"CustomCell"
donnez votre nom de plume au lieu de mon nom de plume CustomCellRAPIDE
OPTION 1:
OPTION 2:
dans le code ci-dessus,
nibName:"NameInput"
donnez votre nom de plumela source
Travailler avec Swift 3.0:
la source
J'ai passé des heures la nuit dernière à comprendre pourquoi ma table générée par programme s'est écrasée sur [myTable setDataSource: self]; C'était OK de commenter et de faire apparaître une table vide, mais ça plantait à chaque fois que j'essayais d'atteindre la source de données;
J'ai fait configurer la délégation dans le fichier h: @interface myViewController: UIViewController
J'avais le code source de données dans mon implémentation et toujours BOOM !, plantez à chaque fois! MERCI à "xxd" (n ° 9): l'ajout de cette ligne de code l'a résolu pour moi! En fait, je lance une table à partir d'un bouton IBAction, voici donc mon code complet:
Soit dit en passant: le bouton doit être lié en tant qu'IBAction et en tant qu'IBOutlet si vous souhaitez y ancrer le popover.
UIPopoverController * popoverController3 est déclaré dans le fichier H directement après @interface entre {}
la source
FWIW, j'ai eu cette même erreur quand j'ai oublié de définir l'identifiant de cellule dans le storyboard. Si tel est votre problème, cliquez dans la table de montage séquentiel sur la cellule du tableau et définissez l'identifiant de la cellule dans l'éditeur d'attributs. Assurez-vous que l'identifiant de cellule que vous définissez ici est le même que
la source
J'ai eu le même problème, j'ai eu la même erreur et pour moi, cela a fonctionné comme ceci:
Peut-être que ce sera utile pour quelqu'un d'autre.
la source
J'ai tout installé correctement dans le Storyboard et fait une construction propre mais j'ai continué à obtenir l'erreur " doit enregistrer une nib ou une classe pour l'identifiant ou connecter une cellule prototype dans un storyboard "
Correction de l'erreur mais je suis toujours perdu. Je n'utilise pas de «cellule personnalisée», juste une vue avec une vue de table intégrée. J'ai déclaré le viewcontroller comme délégué et source de données et je me suis assuré que l'identifiant de cellule correspond dans le fichier. que se passe t-il ici?
la source
Cela peut sembler stupide à certaines personnes, mais cela m'a attiré. J'obtenais cette erreur et le problème pour moi était que j'essayais d'utiliser des cellules statiques mais ensuite d'ajouter dynamiquement plus de choses. Si vous appelez cette méthode, vos cellules doivent être des prototypes dynamiques. Sélectionnez la cellule dans le storyboard et sous l'inspecteur d'attributs, la toute première chose dit «Contenu» et vous devez sélectionner des prototypes dynamiques non statiques.
la source
Juste un complément des réponses: Il peut y avoir un moment où vous définissez tout correctement, mais vous pouvez accidentellement ajouter d'autres interfaces utilisateur en vous
.xib
, comme unUIButton
: Supprimez simplement l'interface utilisateur supplémentaire, cela fonctionne.la source
Assurez-vous que l'identifiant CellIdentifier == de la cellule dans un storyboard, les deux noms sont identiques. J'espère que cela fonctionne pour vous
la source
Dans mon cas, le crash s'est produit lorsque j'ai appelé
deselectRowAtIndexPath:
La ligne était
[tableView deselectRowAtIndexPath:indexPath animated:YES];
Le changer en
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
FIXE MON PROBLÈME!J'espère que cela aide n'importe qui
la source
Dans Swift, ce problème peut être résolu en ajoutant le code suivant dans votre
méthode.
la source
Ran dans cette erreur bc identifiant de réutilisation de cellule était erroné - une erreur de débutant mais cela arrive: 1. S'assure que l'identifiant de réutilisation de cellule n'a pas de fautes d'orthographe ou de lettres manquantes. 2. Dans le même ordre d'idées, n'oubliez pas les chiffres de capitalisation. 3. Les zéros ne sont pas des "O" (Ohs)
la source