Перейменуйте клас у Xcode: Refactor… є сірим (відключений). Чому?


Відповіді:


181

Виберіть символ класу у своєму заголовковому файлі - тобто біті відразу після @interface. Потім слід включити рефакторинг.


У файлі заголовка мого класу є лише @interface, не @class. Але вибір символу після @interface, здається, працює.
Елліот

3
@class якщо для переадресації… s
Джонатан Стерлінг

Це також мене турбує вже досить давно. Дякую!
Джонатан Хедборг

Навіть це не дає можливості рефакторингу в xcode 4. Я стаю безнадійною, чому Apple не покращує свої речі Refactoring. Слід слідкувати за затемненням, як робити справи!
karim

@karim - це ніколи не працює в Xcode, дивіться мою відповідь нижче щодо вирішення, яке працює кожного разу
Адам,

26

Якщо ви використовуєте Objective-C ++ (тобто суміш Objective-C з кодом C ++), то рефакторинг вимкнено в xcode, оскільки він не підтримує рефакторинг коду C ++.


Дуже сумно, майже через 2 роки, і досі не вдасться відновити об'єкти Objective-C.
Крістоферкоттон

@christophercotton Спробуйте майже через 8 років, і вона все ще не реалізована.
Олексій

7

Рефактор також може бути відключений, якщо уражені файли (швидше за все, файл із класом у ньому) не будуть збережені.


1
Збереження Xib-файлу в Interface Builder знову ввімкнуло для мене Refactoring, коли навіть перезапуск Xcode не допомагав, дякую!
Вінсент Гейбл

1
+1 для цього. Деякі кути XCode все ще мають нерівні ділянки, і це один з них. Іноді, якщо збереження не дозволяє рефакторинг, відновлення буде.
пам’ятки

6

Я використовую Xcode вже 5 років, і рефакторинг ніколи не працював правильно (навіть у xcode 4.6 є основні помилки, де він буде пошкоджувати ваш вихідний код!).

Завжди було вирішено (все ще працює на 100%, навіть у випадках, коли код Apple не працює)

  1. використовуйте shift-command-f, щоб знайти всі види використання файлу
  2. у налаштуваннях пошуку виберіть «Замінити»
  3. "замінити все"
  4. зробіть для файлу .h наступне та повторіть його для файлу .m (якщо у вас є):
    1. клацніть правою кнопкою миші оригінальний файл та виберіть "показати в пошуку"
    2. видаліть файл з xcode (виберіть "видалити лише посилання", коли запитуєте)
  5. перейменуйте .h (і .m, якщо у вас є) у Finder
  6. у Xcode виберіть "Продукт -> (утримуйте Alt) -> Очистити папку збірки"
  7. киньте xcode (зазвичай ви можете піти, не роблячи цього, але ПРИМІТКА. У Xcode є деякі інші ОСНОВНІ помилки, де він сам виходить з ладу, якщо цього не зробити)
  8. повторно відкрити xcode
  9. перетягніть .h і .m назад у Xcode
  10. зачекайте декілька секунд (деякі основні методи Xcode є асинхронними - дозволяють пошкодити ваш проект)
  11. нарешті, коли, здається, нічого не роблять (і ваш жорсткий диск більше не видає шуму): cmd-b для відновлення

Я маю 100% успіх за допомогою цього методу. Я просто спробував рефакторинг на Apple "Refactor -> Rename" в останньому xcode, і це не вдалося - знову ж таки!

(цього разу з неправильною помилкою: "Неможливо визначити мову", одне з тих повідомлень про помилки, де Apple поставила неправильний текст на місце)


Так, я нещодавно спробував це (травень 2014 року), і офіційне меню меню "рефактор" Xcode все ще порушено, воно все ще пошкоджує ваш вихідний код. Я здивований, що співробітників Apple це не турбує.
Адам

3

Я збираюся знайти проект на Finder, а потім змінити ім'я файлів, отримавши інформацію .

Після цього в xcode -> Project Navigator я видаляю файли.

Наприкінці клацніть правою клавішею класу та додаю файли до ... та знову додаю ці файли.

Це працювало для мене.


2

Для мене я зрозумів, що Refactor був відключений, оскільки проект Xcode, який я відкрив, посилався на базовий SDK, який відсутній. Відредагуйте параметри проекту та на вкладці Складіть встановіть базовий SDK на той, який у вас є (наприклад, для мене це був iOS 4.2). Це ввімкнуло для мене Рефактор.


1

Крім того, може статися, що ви перейменували ім'я файлу для класу або поза xcode, або натиснувши ctrl на ім'я файлу, а потім перейменувавши його. xcode відмовляється від рефактора, якщо ім'я файлу не відповідає імені класу.


1

Перейдіть до заголовкового файлу класу та знайдіть рядок, схожий на цей:

@interface YourClassName

Клацніть правою кнопкою миші на символі класу (наприклад, YourClassName), і ви зможете вибрати Refactor -> Перейменувати ...

Я тільки що спробував це, і це працює в Xcode 5.


0

Була і ця проблема. Я намагався знайти відсутні пакети SDK, зберігати файли та шукати код Objective-C ++, як згадувалося вище, і все, що потрібно для виправлення моєї машини, було перезавантаження XCode.

Здається, все ще трохи баггі.

До речі, це було для XCode 4.0.1


-1

Рефакторинг працює Якщо ви спочатку змінили ім'я файлу в навігаторі проекту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.