Benennen Sie eine Klasse in Xcode um: Refactor… ist ausgegraut (deaktiviert). Warum?

112

Warum ist Refactor ... in Xcode ausgegraut (deaktiviert)?

Ich möchte eine Klasse umbenennen.

Elliot
quelle

Antworten:

181

Wählen Sie das Symbol der Klasse in ihrer Header-Datei aus - dh das Bit unmittelbar danach @interface. Dann sollte das Refactoring-Material aktiviert sein.

Noah Witherspoon
quelle
Die Header-Datei meiner Klasse hat nur @interface, keine @class. Die Auswahl des Symbols nach @interface scheint jedoch zu funktionieren.
Elliot
3
@ Klasse, wenn für Vorwärtserklärungen… s
Jonathan Sterling
Das stört mich auch schon seit einiger Zeit. Vielen Dank!
Jonatan Hedborg
Auch dies ermöglicht kein Refactoring in xcode 4. Ich werde hoffnungslos, warum Apple seine Refactoring-Dinge nicht verbessert. Es gibt Eclipse zu folgen, wie man Dinge macht!
Karim
@karim - es hat nie in Xcode funktioniert, siehe meine Antwort unten für eine Problemumgehung, die jedes Mal funktioniert
Adam
26

Wenn Sie Objective-C ++ verwenden (dh Objective-C mit C ++ - Code mischen), ist das Refactoring in xcode deaktiviert, da das Refactoring von C ++ - Code nicht unterstützt wird.

Volker Voecking
quelle
Sehr traurig, fast 2 Jahre später, und die Objective-C-Objekte werden immer noch nicht überarbeitet.
Christophercotton
@christophercotton Versuchen Sie es fast 8 Jahre später, und es ist immer noch nicht implementiert.
Alex
7

Refactor kann auch deaktiviert werden, wenn betroffene Dateien (höchstwahrscheinlich die Datei mit Ihrer Klasse) nicht gespeichert werden.

klaaspieter
quelle
1
Das Speichern einer XIB-Datei in Interface Builder hat Refactoring für mich wieder aktiviert, obwohl selbst ein Neustart von Xcode nicht geholfen hat, danke!
Vincent Gable
1
+1 dafür. Einige Ecken von XCode haben immer noch raue Bereiche und dies ist einer von ihnen. Manchmal, wenn das Speichern das Refactoring nicht aktiviert, wird das Wiederherstellen durchgeführt.
Memmons
6

Ich benutze Xcode seit 5 Jahren und Refactoring hat nie richtig funktioniert (selbst Xcode 4.6 hat große Fehler, bei denen es Ihren Quellcode beschädigen wird!).

Die Problemumgehung war schon immer (funktioniert immer noch zu 100%, selbst wenn der Code von Apple fehlschlägt).

  1. Verwenden Sie shift-command-f, um alle Verwendungen der Datei zu finden
  2. Wählen Sie in den Sucheinstellungen "Ersetzen"
  3. "alles ersetzen"
  4. Gehen Sie für die .h-Datei wie folgt vor und wiederholen Sie sie für die .m-Datei (falls vorhanden):
    1. Klicken Sie mit der rechten Maustaste auf die Originaldatei und wählen Sie "Im Finder anzeigen".
    2. Löschen Sie die Datei aus xcode (wählen Sie "Nur Referenzen löschen", wenn Sie dazu aufgefordert werden).
  5. Benennen Sie die .h (und .m, falls vorhanden) im Finder um
  6. Wählen Sie in Xcode "Produkt -> (Alt gedrückt halten) -> Build-Ordner bereinigen"
  7. Beenden Sie xcode (Sie können normalerweise davonkommen, wenn Sie dies nicht tun - aber HINWEIS: Es gibt einige andere wichtige Fehler in Xcode, bei denen es selbst abstürzt, wenn Sie dies nicht tun.)
  8. Öffnen Sie den xcode erneut
  9. Ziehen Sie die Dateien .h und .m zurück in Xcode
  10. Warten Sie einige Sekunden (einige der Kernmethoden von Xcode sind asynchron, sodass Ihr Projekt beschädigt werden kann).
  11. Schließlich, wenn es nichts zu tun scheint (und Ihre Festplatte macht keine Geräusche mehr): cmd-b zum Neuerstellen

Ich habe eine 100% ige Erfolgsquote mit dieser Methode. Ich habe gerade versucht, mit Apples "Refactor -> Rename" im neuesten xcode umzugestalten, und es ist erneut fehlgeschlagen!

(Diesmal mit dem falschen Fehler: "Sprache kann nicht ermittelt werden", eine dieser Fehlermeldungen, bei denen Apple den falschen Text eingefügt hat)

Adam
quelle
Ja, ich habe dies kürzlich versucht (Mai 2014) und die offizielle Xcode-Menüoption "Refactor" ist immer noch defekt. Sie beschädigt immer noch Ihren Quellcode. Ich bin überrascht, dass Apple-Mitarbeiter davon nicht betroffen sind.
Adam
3

Ich gehe zu meinem Projekt im Finder und ändere dann den Dateinamen, indem ich Informationen erhalte .

Danach lösche ich unter xcode -> Project Navigator die Dateien.

Am Ende klicke ich rechts auf die Klasse und und füge Dateien zu ... hinzu und füge diese Dateien erneut hinzu.

Es hat bei mir funktioniert.

Versatz
quelle
2

Für mich wurde klar, dass Refactor deaktiviert war, weil das von mir geöffnete Xcode-Projekt auf ein fehlendes Basis-SDK verwies. Bearbeiten Sie die Projekteinstellungen und setzen Sie auf der Registerkarte "Erstellen" das Basis-SDK auf eines, das Sie haben (für mich war dies iOS 4.2). Dies hat Refactor für mich aktiviert.

user591345
quelle
1

Es kann auch vorkommen, dass Sie den Dateinamen für die Klasse umbenannt haben, entweder außerhalb von xcode oder indem Sie bei gedrückter Strg-Taste auf den Dateinamen klicken und ihn dann umbenennen. xcode weigert sich zu refaktorieren, wenn der Dateiname nicht mit dem Klassennamen übereinstimmt.

carlos_ms
quelle
1

Gehen Sie zur Header-Datei Ihrer Klasse und suchen Sie die Zeile, die ungefähr so ​​aussieht:

@interface YourClassName

Klicken Sie mit der rechten Maustaste auf das Klassensymbol (z. B. YourClassName) und Sie sollten Refactor -> Rename ... auswählen können.

Ich habe es gerade versucht und es funktioniert in Xcode 5.

Einfaches Ziel
quelle
0

Hatte auch dieses Problem. Ich habe versucht, fehlende SDKs zu finden, Dateien zu speichern und nach Objective-C ++ - Code zu suchen, wie oben erwähnt, und alles, was zur Behebung meines Computers erforderlich war, war ein Neustart von XCode.

Scheint immer noch ein wenig fehlerhaft zu sein.

Übrigens war dies für XCode 4.0.1

gdavis
quelle
-1

Refactoring funktioniert Wenn Sie zuerst den Dateinamen im Projektnavigator ändern.

Chris
quelle