web-dev-qa-db-fra.com

Avertissement Storyboard: les cellules de la table prototype doivent avoir des identificateurs de réutilisation

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

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

Aucune suggestion?

110
K.Honda

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

enter image description here

149
aleroot

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

 Setting prototype cells to 0 in Attributes Inspector

16
bitsand

Le storyboard étant en fait un fichier XML, une autre astuce consiste à ouvrir votre storyboard avec n'importe quel éditeur de texte (pas Xcode!) Et d'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 porter votre attention sur la valeur de clé reuseIdentifier="GenericCellID" . Les lignes qui déclenchent l'avertissement (sans identificateurs de réutilisation) n'auront pas cette valeur de clé. Recherchez les nœuds ci-dessus dans votre éditeur de texte et vous verrez le nœud tableViewController avec le nom de la classe que vous devez vérifier dans l'éditeur de storyboard de Xcode et le corriger, conformément à aleroot 'answer.

9
Dmitry Varavkin

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

4
Marcel Wassmer

Une grêle: redémarrer XCode a fonctionné pour moi (mais c'était probablement juste une reconstruction manuelle qui était nécessaire).

2
Hannele

Étant donné qu'un double-clic sur cet avertissement peut donner lieu à une poursuite féroce (le UITableViewCell spécifique n'est pas sélectionné), je voulais simplement ajouter que même si certains de ces avertissements seront résolus automatiquement, certains ne le seront pas .

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

2
Sitric

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

Dans le fichier XML du storyboard, il est préférable de définir reuseIdentifier et non restorationIdentifier.

1
pkamb

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 est:

  1. Il y a deux segues
    1. du contrôleur de navigation au contrôleur de vue racine et 
    2. du contrôleur de vue racine à votre contrôleur de vue initial. 
  2. Sélectionnez le segment 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 -> ilvous verrez l'identifiant comme une option.
  5. Collez le même nom d’identifiant que celui entré précédemment.

L'avertissement va .. sinon nettoyer le sdk :)

1
Mili

J'ai remarqué que cette erreur se produit lorsque vous avez plusieurs cellules prototypes (dans les propriétés tableview) et que vous n'avez pas donné d'identificateur de réutilisation all.

0
Tjalsma

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.

0
Vincent

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;
}
0
Mukesh