Quel est le sens de “pas de chemin d'index pour la table de la cellule d'être réutilisées” message dans iOS 6/7?
Depuis le début de compiler mon application avec iOS 6 (et aussi depuis iOS 7) je ai commencé à voir ce message. Je sais que la façon dont UITableViews aller sur la gestion des cellules est différente dans iOS 6, mais je n'ai pas besoin de modifier mon code pour qu'il continue à travailler. Mais je suis inquiet de ce message peut indiquer un problème potentiel que je ne suis pas encore à voir.
Quelqu'un peut nous donner un indice?
Vous devez vous connecter pour publier un commentaire.
J'ai commencé à avoir cette erreur apparaît-il dans le journal à partir de iOS 7 beta 5-delà, y compris dans l'iOS 7 GM/Communiqué de construire, tout en n'ayant jamais eu ce arrivé à l'une de mes applications dans iOS 6 ou antérieure d'iOS 7 bêta. Après beaucoup d'expérimentation, j'ai trouvé la cause:
J'ai été en utilisant
UITableViewCell
objets pour mon en-tête de section points de vue et de les renvoyer danstableView:viewForHeaderInSection:
. Cela semble être une pratique courante, surtout depuis iOS 5, quand il est devenu facile de concevoir une section d'en-tête de la vue comme un prototype de la vue de la table de cellules dans une table de montage avec Interface Builder.Quand j'ai changé mon application à utiliser de simples
UIView
sous-classes pour mon en-tête de section points de vue, les erreurs s'en alla, et, plus important encore, ma vue de la table arrêté au hasard de la suppression d'en-têtes de section!Il semblerait que (depuis iOS 7 beta 5)
UITableView
est en interne, le maintien d'une cartographie de tous lesUITableViewCell
objets de son point de vue de la hiérarchie et de leurs index respectifs des chemins. Depuis un en-tête de section (ou une vue de la table d'en-tête de bas de page) n'a pas un chemin d'index, si vous utilisez unUITableViewCell
objet de ces points de vue, la vue de la table vont se confondre lorsqu'il trouve unUITableViewCell
pour laquelle il n'a pas un chemin d'index, résultant de la "aucun chemin d'index pour la table de la cellule d'être réutilisées" erreur et, si vous êtes malchanceux, l'affichage des problèmes dans votre tableau: lesMise à JOUR: si vous avez accès à la Dev Apple Forums, voici le thread à ce sujet (que j'ai commencé): https://devforums.apple.com/message/882042#882042
Comme il est suggéré dans ce thread, si vous ne voulez pas re-facteur beaucoup, vous pouvez créer un
UIView
wrapper autour de votreUITableViewCell
et de retour que la section d'en-tête de la vue.Note toutefois que cette "wrapper"
UIView
approche ne sera pas bien jouer avec mise en page automatique et dispositif de rotation, donc je vous suggère d'utiliser unUIView
sous-classe d'en-tête et pied de page les cellules, pas unUITableViewCell
sous-classe comme expliqué dans la partie principale de la réponse.NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"SectionHeader" owner:self options:nil]; SectionHeaderView *sectionHeaderView = nib[0];
Vous ne pouvez pas créer autonome de vue dans un story-board qui n'est pas une vue de contrôleur pour autant que je sais.UIView
avec la même image, puis ajoutez votreUITableViewCell
objet comme une sous-vue, donc, la création d'unUIView
wrapper pour la section d'en-tête de la cellule.contentView
est que toutes les cibles et/ou les délégués sur la cellule va arrêter de travailler. Afin de faire cela seulement si vous avez du contenu statiqueUITableViewCell
pour un en-tête ou le pied de page vue, puis c'est votre problème. Essayez d'utiliser unUIView
sous-classe.Je serais de retour le contentView de la UITableViewCell au lieu de créer un wrapper.. avoir de contrainte-jabble fixe dans storybord à l'esprit
UIView
sous-classe comme en-tête / pied de page de la cellule pas unUITableViewCell
sous-classe. Ce le sera toujours, même avec mise en page automatique (@BartvanKuik). LeUIView
wrapper solution est une solution rapide alternative.UITableViewCell
view
, de les appliquer à lacontentView
et il devrait s'afficher correctement, au moins, c'était la solution facile pour moi. Cette réponse est beaucoup plus facile de fixer, si vous avez déjà câblé vos en-têtes de section comme les cellules dans un storyboard.J'ai eu le même problème et il m'a fallu quelques heures pour traquer la question. En fait, j'ai appeler
[textField becomeFirstResponder]
lors de la configuration de cellules (ici la zone de texte faisait partie d'une coutume tableviewcell);[textField becomeFirstResponder]
à tour les postes keyboardWillShow notification qui à leur tour causé la tableview prématuré de la charge elle-même ainsi à l'origine de la tristement célèbre "pas de chemin d'index pour la table de la cellule d'être réutilisées” message. Une fois que j'ai enlevé cet appel, le problème a disparu.dispatch_async(dispatch_get_main_queue(), { self.textField.becomeFirstResponder() })
et le problème a disparuPlus de la accepté de répondre (mluisbrown), j'ai besoin d'ajouter un autoresizingMask à la cellule d'en-tête, depuis que le mien contenait un multi-étiquette de ligne, c'est à dire
UIView
wrapper, il serait préférable de faire votre en-tête / pied de page cellulesUIView
sous-classes, pasUITableView
sous-classes. De cette façon, vous n'aurez pas à l'ajouter d'un redimensionnement automatique d'un masque.C'est un interne UIKit bug - comme mentionné dans le propre d'Apple dev forums. Il est soi-disant en fixe les nouvelles versions de xcode, bien que je n'ai pas réussi à trouver des infos concernant la version qui corrige ce.
Comme un complément à mon post précédent (dans lequel j'ai mentionné que c'était apparemment un bug avec UIKit), j'ai été capable de trouver une solution pour mon cas particulier (dans laquelle le message a été liée à une étrange visualisation des pépins sur la table).
Apparemment ma cellule personnalisé est substituée
-(void)setEditing:animated:
prenais trop de temps pour revenir.Mon code précédent a été de:
J'ai été en mesure de le réparer en le modifiant pour:
Faire mon endupdates après resignfirstresponder résolu mon problème (qui Ont un UITextFIeld dans ma cellule personnalisé)
J'ai eu le même problème avec le message d'erreur affiché. Aussi loin que je peux voir, elle est causée par le rechargement de la vue de la table à partir d'une fonction appelée par le textfield dans le cadre de son délégué protocole. Ie textFieldDidEndEditing -> [contrôleur.tableview recharger...]
Pour l'enregistrement, j'ai rencontré ce message lors de l'exécution sous iOS 6. Il semble que certains codes hérités ou importées avait quelque chose comme ceci:
Lorsque le beginUpdate: /endUpdate: séquence a été supprimée, le problème comme par magie disparu.
C'est évidemment une vieille question, mais j'espère que cela peut aider toute personne qui obtient toujours ce problème dans iOS8+ parce que c'est la première question qui vous vient ce message d'erreur particulier.
J'ai été en utilisant PINRemoteImage async télécharger une image à une UIImageView qui était à l'intérieur d'une coutume UITableViewCell.
Afin de redimensionner les lignes correctement (dynamique de la hauteur des cellules à l'aide de l'auto-mise en page) une fois que l'image avait chargé, je l'ai appelé:
J'ai été l'obtention de la "aucun chemin d'index pour la table de la cellule d'être réutilisées" message et l'application de s'écraser. J'avais pensé la PINRemoteImageManagerResult bloc était sur le thread principal, cependant, il s'avère qu'il ne l'était pas, par conséquent, veiller à ce que le point de début/fin des mises à jour a été appelée sur le thread principal résolu le problème.
Bien, j'ai juste utilisé la meilleure partie de la journée à essayer de comprendre ce hors, alors j'espère que cette explication alternative sauve quelqu'un d'autre peu de temps.
J'ai eu un tableview qui était en train de donner ce message parfois, lors du chargement. Il s'est avéré être causée par KVO notifications pour la Base de Données des objets de tir, tandis que la vue était en train de charger. (Sur l'observation d'un changement, mon contrôleur essayé appelé reloadData sur la tableview en question. Fixé par la non observation des objets jusqu'à ce que l'on a fini de se charger (auparavant, j'ai commencé à observer l'objet une fois qu'il a été affecté par l'accesseur)
TLDR: Vérifier pour voir si vous pouvez essayer de recharger vos données à partir d'autre chose que le thread principal.
Peut-être que cela aide quelqu'un: j'ai déjà eu ce message d'erreur lors de l'actualisation d'une seule vue de la table de la cellule.
Je voulais faire quelque chose comme
Mais par hasard, j'ai tapé
Avis la différence des deux indexpaths: l'un est créé avec
indexPathForItem
(mal), et l'autre avecindexPathForRow
(correct).Tout cela a conduit à de très étrange comportement de la tableView et le message d'erreur dans le titre.
Il semble que ma question a été déclenché quand j'ai essayé de mettre à jour l'INTERFACE utilisateur à l'intérieur d'une portion de code qui a été un rappel à partir d'un appel web. Je l'ai résolu en forçant les mises à jour de l'INTERFACE utilisateur arrive sur le thread principal. J'ai utilisé ce type de code.
Je l'appelle comme suit à l'intérieur de la réussite de mon fond de web call.
Une autre condition encore...
Ce qui s'est passé quand, ne voulant pas d'un en-tête, je suis retourné
nil
.Correctif: