Avertissement de storyboard: les cellules de table prototypes doivent avoir des identifiants de réutilisation

123

Je reçois cet avertissement du storyboard - les cellules de table prototypes doivent avoir des identifiants de réutilisation.

J'ai renommé l'identifiant dans l'inspecteur d'attributs mais il ne semble pas avoir supprimé l'avertissement.

Aucune suggestion?

K.Honda
la source
Vous avez soit rempli le mauvais champ, soit vous avez plusieurs vues de table. Pouvez-vous publier une capture d'écran de l'inspecteur d'attributs?
jrturton
3
C'est bon maintenant mon pote. J'ai trouvé une solution. La valeur de l'identificateur doit être la même que celle de l'identificateur de réutilisation. :)
K.Honda
Avez-vous défini un identifiant pour chaque cellule?
Mick MacCallum
Salut Honda! Pourriez-vous s'il vous plaît me dire ce que vous avez fait parce que j'obtiens la même erreur.
Varun Mehta
2
J'ai remarqué que parfois (en utilisant actuellement le dernier Xcode 5 Beta 5 (5B103i)) met en évidence les mauvais emplacements de l'erreur / avertissement dans le storyboard. Donc, si vous cliquez sur l'avertissement, il affichera parfois le mauvais emplacement où un avertissement similaire pourrait déjà être corrigé. Je suggère de parcourir manuellement l'une des vues de table que vous avez dans votre storyboard et de vérifier s'il existe d'autres cellules avec un identifiant manquant. Ci-dessus résolu mon problème avec cet avertissement. Merci @ K.Honda d'avoir posé la question car ce sujet m'a aidé à comprendre comment résoudre le problème.
Justas

Réponses:

159

Pour fermer l'avertissement, vous devez donner un nom à l'identificateur de cellule:

entrez la description de l'image ici

aleroot
la source
14
m'est arrivé. fermez xcode - ouvrez-le, puis changez l'identifiant
Idan Magled
7
Lorsque l'avertissement persiste, cela signifie que quelque part dans votre StoryBoard, il y a encore une cellule sans identifiant
saimonx
Si vous avez plus d'une cellule prototype, vous devez leur donner un indicateur, sinon définissez simplement le nombre sur un dans la cellule prototype
user1700737
6
J'ai dû supprimer le dossier des données dérivées (équivalent Xcode d'un redémarrage de Windows) et le reconstruire pour me débarrasser de ce faux avertissement.
Michael McGuire
Cela a fonctionné pour moi: fermez Xcode, ouvrez / Users / username / Library / Developer / Xcode / DerivedData dans Finder et supprimez tout son contenu (pas le dossier DerivedData lui-même).
dldnh
18

Une autre méthode consiste à définir la propriété «Cellules prototypes» de la vue tableau sur zéro dans l'inspecteur d'attributs, si vous définissez la cellule à l'aide d'un .xib par programme.

Définition des cellules prototypes sur 0 dans l'inspecteur d'attributs

bitsand
la source
9

Comme le storyboard est en fait un fichier XML, une autre astuce consiste à ouvrir votre storyboard avec n'importe quel éditeur de texte (pas Xcode!) Et à essayer de trouver tous les nœuds tableViewCell. Par exemple, appuyez sur CMD + F , tapez <tableViewCell contentMode="scaleToFill"et appuyez sur Entrée. Vous découvrirez probablement les mêmes lignes que celle-ci:

<tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">

Veuillez prêter votre attention sur la reuseIdentifier="GenericCellID"valeur clé. Les lignes qui déclenchent l'avertissement (sans réutilisation des identificateurs) n'auront pas une telle valeur de clé. Regardez les nœuds ci-dessus dans votre éditeur de texte et vous verrez le tableViewControllernœud avec le nom de classe que vous devez vérifier dans l'éditeur de storyboard de Xcode et corriger, selon la réponse d'aleroot.

Dmitry Varavkin
la source
1
Vous pouvez effectivement ouvrir votre story - board code avec Xcode en faisant un CTRL + clic sur votre fichier story - board> Open As>Source Code
NSTJ
4

Si votre avertissement Xcode ne disparaît toujours pas même après avoir défini reuseIdentifier, essayez le menu "Produit -> Nettoyer". Cela m'a aidé et après cela, l'avertissement n'est plus apparu.

Marcel Wassmer
la source
2

Étant donné que le double-clic sur cet avertissement peut entraîner un peu une chasse à l'oie sauvage (le UITableViewCell spécifique n'est pas sélectionné), je voulais simplement ajouter que si certains de ces avertissements se résoudront automatiquement, d' autres ne le seront pas .

Si vous êtes sûr d'avoir balisé toutes vos cellules dans Storyboard, reconstruisez le projet - votre avertissement peut disparaître (comme le mien).

Sitric
la source
2

Un salut Mary: le redémarrage de XCode a fonctionné pour moi (mais c'était probablement juste une reconstruction manuelle qui était nécessaire).

Hannele
la source
1

J'ai reçu cet avertissement pour Xcode 7. Je travaille avec Swift. Je n'ai pas ajouté le contrôleur de navigation pour le contrôleur de vue initial. Quand je l'ai fait ... j'ai reçu cet avertissement de StoryBoard. Ce que j'ai fait c'est:

  1. Il y a deux segments
    1. du contrôleur de navigation au contrôleur de vue racine et
    2. du contrôleur Root View à votre contrôleur View initial.
  2. Sélectionnez le segue connectant le contrôleur de vue racine au contrôleur de vue initial.
  3. Nommez l'identifiant
  4. Sélectionnez la partie écrite "Prototype" du contrôleur -> vous y verrez l'identifiant en option.
  5. Collez le même nom de l'identifiant que celui entré précédemment.

L'avertissement disparaît ... sinon nettoyez le sdk :)

Mili
la source
1

Assurez-vous que vous définissez l' identificateur de réutilisation sur l'objet, plutôt que l' ID de restauration . Les deux sont disponibles via le storyboard et facilement confondus.

Dans le fichier XML du storyboard, vous voudrez définir reuseIdentifier, non restorationIdentifier.

pkamb
la source
0

J'ai remarqué que cette erreur se produit lorsque vous avez plusieurs cellules prototypes (dans les propriétés de tableview) et que vous ne leur avez pas toutes donné des identificateurs de réutilisation.

Tjalsma
la source
J'ai vu cela aussi, existe-t-il un moyen de nommer toutes les cellules à la fois ou existe-t-il un autre moyen de supprimer ces avertissements?
CatsLoveJazz
1
Chaque cellule Prototye a besoin de son propre nom. Il n'y a donc aucun moyen de le faire automatiquement
Vincent
0

L'identifiant est le nom auquel vous faites référence dans votre fichier .m. Lorsqu'il n'est pas rempli, il n'est pas possible de référencer la cellule.

Vincent
la source
0

Ceci pour définir l'identifiant de réutilisation par programme

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
{
    static NSString *cellIdentifier = @"wot";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];

    return cell;
}
Mukesh
la source