web-dev-qa-db-fra.com

Renommer une classe dans Xcode: Refactor ... est grisé (désactivé). Pourquoi?

Pourquoi Refactor ... grisé (désactivé) dans Xcode?

Je voudrais renommer une classe.

111
Elliot

Sélectionnez le symbole de la classe dans son fichier d'en-tête, c'est-à-dire le bit juste après @interface. Ensuite, le refactoring devrait être activé.

180
Noah Witherspoon

Si vous utilisez Objective-C++ (c'est-à-dire mélanger Objective-C avec du code C++), le refactoring est désactivé dans xcode car il ne prend pas en charge le refactoring du code C++.

26
Volker Voecking

Refactor peut également être désactivé si les fichiers affectés (très probablement le fichier avec votre classe) ne sont pas enregistrés.

7
klaaspieter

J'utilise Xcode depuis 5 ans maintenant, et le refactoring n'a jamais fonctionné correctement (même xcode 4.6 a des bugs majeurs où il corrompra votre code source!).

La solution de contournement a toujours été (fonctionne toujours à 100%, même dans les cas où le code d'Apple échoue)

  1. utilisez shift-command-f pour trouver toutes les utilisations du fichier
  2. sélectionnez "remplacer" dans les paramètres de recherche
  3. "remplace tout"
  4. procédez comme suit pour le fichier .h et RÉPÉTEZ-LE POUR LE FICHIER .m (si vous en avez un):
    1. cliquez avec le bouton droit sur le fichier d'origine et sélectionnez "afficher dans le Finder"
    2. supprimer le fichier de xcode (sélectionnez "supprimer les références uniquement" lorsque cela vous est demandé)
  5. renommer le .h (et .m si vous en avez un) dans le Finder
  6. dans Xcode, sélectionnez "Produit -> (maintenez la touche Alt) -> Clean Build Folder"
  7. quittez xcode (vous pouvez généralement vous en sortir en ne faisant pas cela - mais REMARQUE: il y a d'autres bogues MAJEURS dans Xcode où il se bloque si vous ne le faites pas)
  8. rouvrir xcode
  9. faites glisser/déposez les fichiers .h et .m dans Xcode
  10. attendez quelques secondes (certaines des méthodes de base de Xcode sont asynchrones - ce qui lui permet de corrompre votre projet)
  11. enfin, quand il semble ne rien faire (et que votre disque dur ne fait plus de bruit): cmd-b à recompiler

J'ai un taux de réussite de 100% avec cette méthode. J'ai juste essayé de refactoriser avec "Refactor -> Rename" d'Apple dans le dernier xcode et il a échoué - encore une fois!

(cette fois avec l'erreur incorrecte: "Impossible de déterminer la langue de", l'un de ces messages d'erreur où Apple a mis le mauvais texte en place)

6
Adam

Je vais à mon projet dans le Finder, puis changez le nom des fichiers par obtenir des informations.

Après cela, sur xcode -> Project Navigator je supprime les fichiers.

À la fin, je clique à droite sur la classe et Ajouter des fichiers à ..., et j'ajoute à nouveau ces fichiers.

Ça a marché pour moi.

3
offset

Pour moi, j'ai réalisé que Refactor était désactivé car le projet Xcode que j'avais ouvert faisait référence à un SDK de base qui manquait. Modifier les paramètres du projet et dans l'onglet Build, définissez le SDK de base sur celui que vous avez (comme pour moi, c'était iOS 4.2). Cela a permis de refactoriser pour moi.

2
user591345

Accédez au fichier d'en-tête de votre classe et recherchez la ligne qui ressemble à ceci:

@interface YourClassName

Faites un clic droit sur le symbole de la classe (par exemple YourClassName) et vous devriez pouvoir sélectionner Refactor -> Rename ...

Je viens d'essayer cela et cela fonctionne dans Xcode 5.

1
easytarget

En outre, il peut arriver que vous renommiez le nom de fichier de la classe, soit en dehors de xcode, soit en cliquant sur le nom de fichier avec la touche Ctrl, puis en le renommant. xcode refuse de refactoriser si le nom de fichier ne correspond pas au nom de la classe.

0
carlos_ms

Eu ce problème aussi. J'ai parcouru en essayant de trouver les SDK manquants, en enregistrant des fichiers et en recherchant le code Objective-C++ comme mentionné ci-dessus, et tout ce qu'il a fallu pour réparer ma machine était de redémarrer XCode.

Semble encore un peu buggy.

BTW, c'était pour XCode 4.0.1

0
gdavis