Zmień nazwę klasy w Xcode: Refactor… jest wyszarzona (wyłączona). Czemu?

112

Dlaczego Refactor ... jest wyszarzony (wyłączony) w Xcode?

Chciałbym zmienić nazwę klasy.

Elliot
źródło

Odpowiedzi:

181

Wybierz symbol klasy w jej pliku nagłówkowym - tj. Bit tuż po @interface. Następnie należy włączyć refaktoryzację.

Noah Witherspoon
źródło
Plik nagłówkowy mojej klasy zawiera tylko @interface, a nie @class. Ale wybór symbolu po @interface wydaje się działać.
Elliot
3
@class if for forward declarations… s
Jonathan Sterling
To mnie również niepokoi od dłuższego czasu. Dzięki!
Jonatan Hedborg
Nawet to nie umożliwia refaktoryzacji w xcode 4. Staję się beznadziejny, dlaczego Apple nie ulepsza swoich rzeczy związanych z refaktoryzacją. Jest Eclipse do naśladowania, jak robić rzeczy!
karim
@karim - to nigdy nie działało w Xcode, zobacz moją odpowiedź poniżej na obejście, które działa za każdym razem
Adam
26

Jeśli używasz Objective-C ++ (tj. Mieszasz Objective-C z kodem C ++), refaktoryzacja jest wyłączona w xcode, ponieważ nie obsługuje refaktoryzacji kodu C ++.

Volker Voecking
źródło
Bardzo smutne, prawie 2 lata później i nadal nie będzie refaktoryzować obiektów Objective-C.
christophercotton
@christophercotton Spróbuj prawie 8 lat później i nadal nie jest zaimplementowany.
Alex
7

Refaktoryzacja może być również wyłączona, jeśli pliki, których dotyczy problem (najprawdopodobniej plik z twoją klasą) nie zostaną zapisane.

klaaspieter
źródło
1
Zapisanie pliku xib w Interface Builder ponownie włączyło dla mnie Refaktoryzację, nawet gdy ponowne uruchomienie Xcode nie pomogło, dzięki!
Vincent Gable
1
+1 za to. Niektóre rogi XCode nadal mają nierówne obszary i to jest jeden z nich. Czasami, jeśli oszczędzanie nie umożliwia refaktoryzacji, przebudowa będzie.
memmons,
6

Używam Xcode od 5 lat i refaktoryzacja nigdy nie działała poprawnie (nawet xcode 4.6 zawiera poważne błędy, które spowodują uszkodzenie twojego kodu źródłowego!).

Obejście zawsze było (nadal działa w 100%, nawet w przypadkach, gdy kod Apple zawodzi)

  1. użyj shift-command-f, aby znaleźć wszystkie zastosowania pliku
  2. wybierz „zamień” w ustawieniach wyszukiwania
  3. "Zamień wszystko"
  4. wykonaj następujące czynności dla pliku .h i POWTÓRZ JĄ DLA PLIKU .m (jeśli taki masz):
    1. kliknij prawym przyciskiem myszy oryginalny plik i wybierz „pokaż w wyszukiwarce”
    2. usuń plik z xcode (wybierz „usuń tylko odniesienia”, gdy pojawi się pytanie)
  5. zmień nazwę .h (i .m, jeśli masz) w Finderze
  6. w Xcode wybierz „Produkt -> (przytrzymaj Alt) -> Wyczyść folder kompilacji”
  7. wyjdź z xcode (zwykle możesz uciec, jeśli tego nie zrobisz - ale UWAGA: w Xcode jest kilka innych POWAŻNYCH błędów, w których sam się zawiesza, jeśli tego nie zrobisz)
  8. ponownie otwórz xcode
  9. przeciągnij / upuść .h i .m z powrotem do Xcode
  10. poczekaj kilka sekund (niektóre z podstawowych metod Xcode są asynchroniczne - co pozwala na uszkodzenie projektu)
  11. na koniec, gdy wydaje się, że nic nie robi (a dysk twardy nie wydaje już żadnych dźwięków): cmd-b, aby odbudować

Mam 100% skuteczność tej metody. Właśnie próbowałem refaktoryzacji za pomocą programu Apple „Refactor -> Rename” w najnowszym xcode i znowu się nie udało!

(tym razem z nieprawidłowym błędem: „Nie można określić języka”, jeden z tych komunikatów o błędach, w których Apple wstawił niewłaściwy tekst)

Adam
źródło
Tak, wypróbowałem to niedawno (maj 2014) i oficjalna opcja menu „refaktoryzacji” Xcode jest nadal zepsuta, nadal psuje kod źródłowy. Dziwię się, że pracownicy Apple nie przejmują się tym.
Adam,
3

Idę do mojego projektu w Finderze, a następnie zmieniam nazwę pliku, uzyskując informacje .

Następnie w xcode -> Project Navigator usuwam pliki.

Na koniec klikam prawym przyciskiem myszy klasę i dodaję pliki do ... i ponownie dodaję te pliki.

U mnie to zadziałało.

offsetowy
źródło
2

Zdałem sobie sprawę, że Refactor jest wyłączony, ponieważ projekt Xcode, który otworzyłem, odwoływał się do brakującego zestawu Base SDK. Edytuj ustawienia projektu i na karcie Kompiluj ustaw podstawowy zestaw SDK na taki, który masz (jak dla mnie był to iOS 4.2). To umożliwiło mi Refactor.

user591345
źródło
1

Może się również zdarzyć, że zmieniono nazwę pliku dla klasy, albo poza xcode, albo przez kliknięcie, przytrzymując klawisz Ctrl, nazwę pliku, a następnie zmianę nazwy. xcode odmawia refaktoryzacji, jeśli nazwa pliku nie zgadza się z nazwą klasy.

carlos_ms
źródło
1

Przejdź do pliku nagłówkowego swojej klasy i znajdź wiersz, który wygląda podobnie do tego:

@interface YourClassName

Kliknij prawym przyciskiem myszy symbol klasy (np. YourClassName) i powinieneś być w stanie wybrać Refactor -> Rename ...

Właśnie tego spróbowałem i działa w Xcode 5.

łatwy cel
źródło
0

Miałem też ten problem. Pobiegłem przez próbę znalezienia brakujących SDK, zapisywania plików i szukania kodu Objective-C ++, jak wspomniano powyżej, a wszystko, co było potrzebne, aby naprawić moją maszynę, to ponowne uruchomienie XCode.

Wydaje się, że wciąż jest trochę wadliwy.

BTW, to było dla XCode 4.0.1

gdavis
źródło
-1

Refaktoryzacja działa, jeśli najpierw zmienisz nazwę pliku w nawigatorze projektu.

Chris
źródło