Переименуйте класс в Xcode: Refactor ... недоступен (отключен). Зачем? - PullRequest
111 голосов
/ 14 июня 2009

Почему Refactor ... недоступен (отключен) в Xcode?

Я бы хотел переименовать класс.

Ответы [ 10 ]

179 голосов
/ 14 июня 2009

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

26 голосов
/ 14 июня 2009

Если вы используете Objective-C ++ (т.е. смешиваете Objective-C с кодом C ++), то рефакторинг отключается в xcode, поскольку он не поддерживает рефакторинг кода C ++.

7 голосов
/ 14 июня 2009

Refactor также может быть отключен, если затронутые файлы (скорее всего, файл с вашим классом в нем) не сохранены.

6 голосов
/ 23 июня 2013

Я использую 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 поместила неправильный текст на место)

3 голосов
/ 03 июня 2013

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

После этого в xcode -> Project Navigator Я удаляю файлы.

В конце я щелкаю правой кнопкой мыши по классу и Добавляю файлы в ... и снова добавляю эти файлы.

Это сработало для меня.

2 голосов
/ 27 января 2011

Я понял, что Refactor был отключен, потому что открытый проект Xcode ссылается на отсутствующий базовый SDK. Отредактируйте параметры проекта и на вкладке «Сборка» установите базовый SDK, который у вас есть (как для меня это была iOS 4.2). Это включило Refactor для меня.

1 голос
/ 12 декабря 2013

Перейдите в файл заголовка вашего класса и найдите строку, которая выглядит примерно так:

@interface YourClassName

Щелкните правой кнопкой мыши на символе класса (например, YourClassName), и вы сможете выбрать Refactor -> Rename ...

Я только что попробовал это, и это работает в Xcode 5.

0 голосов
/ 21 марта 2014

Рефакторинг работает Если вы сначала измените имя файла в навигаторе проекта.

0 голосов
/ 05 апреля 2011

Была и эта проблема. Я попытался найти отсутствующие SDK, сохранить файлы и найти код Objective-C ++, как упоминалось выше, и все, что требовалось для исправления моей машины, это перезагрузить XCode.

Кажется, еще немного глючит.

Кстати, это было для XCode 4.0.1

0 голосов
/ 27 февраля 2011

Кроме того, может случиться так, что вы переименовали имя файла для класса, либо вне xcode, либо нажав Ctrl + клик по имени файла, а затем переименовав его. xcode отказывается от рефакторинга, если имя файла не совпадает с именем класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...