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

Pourquoi Refactor … est-il grisé (désactivé) dans Xcode?

Je voudrais renommer une classe.

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

Si vous utilisez Objective-C ++ (par exemple, mélangez 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 ++.

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

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

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

  1. utilisez shift-command-f pour trouver toutes les utilisations du fichier
  2. sélectionnez “remplacer” dans les parameters 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. Faites un clic droit sur le fichier original et sélectionnez “show in finder”
    2. supprimer le fichier de xcode (sélectionnez “supprimer uniquement les références” lorsque demandé)
  5. renommer le .h (et .m si vous en avez un) dans le Finder
  6. dans Xcode, sélectionnez “Product -> (maintenez Alt) -> Clean Build Folder”
  7. Quitter xcode (vous pouvez généralement vous en passer – mais NOTE: il y a d’autres bogues MAJEURS dans Xcode où il se plante si vous ne le faites pas)
  8. rouvrir le xcode
  9. Glissez / déposez le .h et le .m dans Xcode
  10. attendez quelques secondes (certaines des méthodes principales 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 pour reconstruire

J’ai un taux de réussite de 100% avec cette méthode. Je viens d’essayer de refactoring avec “Refactor -> Rename” d’Apple dans la dernière version de xcode et il a encore é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)

Je vais à mon projet à finder, puis changez le nom des fichiers en obtenant des informations .

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

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

Cela a fonctionné pour moi.

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 manquant. Modifiez les parameters du projet et, dans l’onglet Construire, définissez le SDK de base sur celui que vous possédez (comme pour iOS 4.2). Cela a permis Refactor pour moi.

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 ceci et cela fonctionne dans Xcode 5.

En outre, il se peut que vous ayez renommé le nom de fichier de la classe, soit en dehors de xcode, soit en cliquant sur le nom du fichier tout en maintenant la touche Ctrl enfoncée, puis en le renommant. xcode refuse de refactoriser si le nom de fichier ne correspond pas au nom de la classe.

Eu ce problème aussi. J’ai essayé de trouver des SDK manquants, d’enregistrer des fichiers et de rechercher le code Objective-C ++ comme mentionné ci-dessus, et tout ce qu’il fallait pour réparer ma machine était de redémarrer XCode.

Semble un peu buggy encore.

BTW, c’était pour XCode 4.0.1

Le refactoring fonctionne Si vous modifiez d’abord le nom du fichier dans le navigateur de projet.