Ответ 1
Да, рефакторинг сильно поврежден в Xcode 7.
Я нашел похожие проблемы при попытке переименовать свойства, методы и классы. Вчера я загрузил 7.1.1 с надеждой, что могут быть некоторые улучшения, но пока нет.
Я провел некоторое тестирование в одном проекте с одним представлением в Objective-C на Xcode 7.1.1 и нашел следующее:
- Если вы попытаетесь переименовать свойство с ключевым словом IBOutlet, оно не будет выполнено;
- Если вы попытаетесь переименовать другое свойство, которое не является IBOutlet, но над его объявлением вы имеете любое свойство, которое является IBOutlet, переименование не будет выполнено;
- Если вы попытаетесь переименовать метод, объявленный ниже, свойство IBOutlet и сделайте это, щелкнув правой кнопкой мыши метод в файле .h, переименование не будет выполнено;
- Если вы попытаетесь переименовать класс, который #imports класс, который имеет некоторые объявления IBOutlet в файле заголовка, переименование не будет выполнено (выделено, так как это так, этот оригинальный вопрос).
К счастью, я также нашел некоторые обходные пути:
- Если вы переместите объявление своего свойства над объявлениями IBOutlet, переименование будет успешным;
- Если вам нужно переименовать IBOutlet, вы можете переместить его выше всех других IBOutlets и удалить его ключевое слово IBOutlet перед его переименованием. Переименование будет успешным (и также переименует его в Storyboard), тогда вы можете добавить ключевое слово IBOutlet назад;
- Если вы переместите объявление своего метода выше любого переименования свойств IBOutlet, оно будет успешным из файла .h, но, как альтернатива, оно также работает, если вы попытаетесь переименовать его при выборе в файле .m(последний случай работает, даже если метод объявляется в файле .h ниже свойств IBoutlet);
- При переименовании класса, который импортирует другой класс с помощью IBOutlets, вы можете сделать следующее: переместите IBOutlets другого класса из файла .h в файл .m. Затем переименовывается. Альтернативно - удалите все ключевые слова IBOutlet перед переименованием и затем добавьте их обратно после него.
Примечание.. Когда я говорю, что переименование выполнено успешно, я имею в виду - он не покажет вам "Выбор не тип, который можно переименовать". Однако он все еще не работает гладко большую часть времени:
- Он не показывает изменения, которые должны быть внесены в файлы, как это было раньше:
- Он может жаловаться на то, что файлы были изменены другим приложением, в то время как Xcode имеет несохраненные изменения. Как я уже нашел, обычно вам нужно выбрать "Keep Xcode Version";
- Он может не переименовать свойство во всех файлах, которые он использовал. Это наиболее важно, что в некоторых случаях делает все обходные пути бесполезными. В частности, я видел это при переименовании свойств IBOutlet с помощью метода, описанного выше.
Надеюсь, это поможет:)