Xcode에서 클래스 이름 바꾸기 : Refactor…가 회색으로 표시됩니다 (비활성화 됨). 왜?


112

Refactor ... 가 Xcode에서 회색으로 표시 (비활성화) 된 이유는 무엇 입니까?

수업 이름을 바꾸고 싶습니다.

답변:


181

헤더 파일에서 클래스의 심볼을 선택합니다 @interface. 즉 . 그런 다음 리팩토링 항목을 활성화해야합니다.


내 클래스의 헤더 파일에는 @interface 만 있고 @class는 없습니다. 그러나 @interface 다음에 기호를 선택하면 작동하는 것 같습니다.
Elliot

3
@class 앞으로 선언에 대한 ... s의 경우
조나단 스털링

이것은 또한 꽤 오랫동안 나를 괴롭 혔습니다. 감사!
Jonatan Hedborg 2009

이것조차 xcode 4에서 리팩토링을 가능하게하지 않는다. 나는 희망이 없어지고있다. 왜 애플이 리팩토링을 개선하지 않는지. 따라야 할 Eclipse, 작업 방법이 있습니다!
karim

@karim-그것은 Xcode에서 작동하지 않았습니다. 매번 작동하는 해결 방법은 아래 내 대답을 참조하십시오
Adam

26

Objective-C ++를 사용하는 경우 (즉, Objective-C를 C ++ 코드와 혼합) xcode에서 C ++ 코드의 리팩토링을 지원하지 않으므로 리팩토링이 비활성화됩니다.


거의 2 년이 지났지 만 여전히 Objective-C 개체를 리팩토링하지 않을 것입니다.
christophercotton

@christophercotton 거의 8 년 후에 시도해 보았지만 아직 구현되지 않았습니다.
Alex

7

영향을받는 파일 (대부분 클래스가있는 파일)이 저장되지 않은 경우 리팩터링이 비활성화 될 수도 있습니다.


1
Interface Builder에 xib 파일을 저장하면 Refactoring이 다시 활성화되었습니다. Xcode를 다시 시작해도 도움이되지 않았습니다. 감사합니다!
Vincent Gable

1
이것에 대해 +1. XCode의 일부 구석에는 여전히 거친 영역이 있으며 이것이 그중 하나입니다. 저장이 리팩토링을 활성화하지 않으면 리빌드가 가능합니다.
memmons

6

저는 Xcode를 5 년 동안 사용해 왔으며 리팩토링이 제대로 작동하지 않았습니다 (xcode 4.6에도 소스 코드를 손상시키는 주요 버그가 있습니다!).

해결 방법은 항상 (Apple의 코드가 실패하는 경우에도 여전히 100 % 작동합니다)

  1. 파일의 모든 용도를 찾으려면 shift-command-f를 사용하십시오.
  2. 검색 설정에서 "바꾸기"를 선택하십시오
  3. "전부 교체"
  4. .h 파일에 대해 다음을 수행하고 .m 파일에 대해 반복합니다 (있는 경우).
    1. 원본 파일을 마우스 오른쪽 버튼으로 클릭하고 "파인더에 표시"를 선택합니다.
    2. xcode에서 파일 삭제 (요청시 "참조 만 삭제"선택)
  5. Finder에서 .h (및있는 경우 .m) 이름 변경
  6. Xcode에서 "제품-> (Alt 누르고 있음)-> 빌드 폴더 정리"를 선택하십시오.
  7. xcode를 종료합니다 (보통이 작업을 수행하지 않아도 벗어날 수 있습니다. 그러나 참고 : Xcode에는이 작업을 수행하지 않으면 자체적으로 충돌하는 다른 주요 버그가 있습니다)
  8. xcode 다시 열기
  9. .h 및 .m을 Xcode로 다시 끌어다 놓습니다.
  10. 몇 초 기다리십시오 (Xcode의 핵심 메서드 중 일부는 비동기식이므로 프로젝트가 손상 될 수 있음)
  11. 마지막으로 아무 작업도하지 않는 것 같으면 (하드 디스크에서 더 이상 소음이 발생하지 않음) cmd-b to re-build

이 방법으로 성공률이 100 %입니다. 방금 최신 xcode에서 Apple의 "Refactor-> Rename"으로 리팩토링을 시도했지만 실패했습니다.

(이번에는 잘못된 오류 : "언어를 확인할 수 없음", Apple이 잘못된 텍스트를 입력 한 오류 메시지 중 하나)


그래, 나는 (2014 년 5 월) 최근이 시도하고 Xcode의 공식적인 "리팩토링"menuoption가되어 여전히 깨진, 그것은 여전히 소스 코드를 손상됩니다. Apple 직원이 이것에 신경 쓰지 않는다는 것이 놀랍습니다.
Adam

3

finder에서 내 프로젝트로 이동 한 다음 정보가져 와서 파일 이름을 변경합니다 .

그 후 xcode-> Project Navigator 에서 파일을 삭제합니다.

마지막으로 클래스를 마우스 오른쪽 버튼으로 클릭하고 파일을 ... 에 추가하고이 파일을 다시 추가합니다.

그것은 나를 위해 일했습니다.


2

저에게는 내가 열어 본 Xcode 프로젝트가 누락 된 Base SDK를 참조하고 있었기 때문에 Refactor가 비활성화되었음을 깨달았습니다. 프로젝트 설정을 편집하고 빌드 탭에서 기본 SDK를 보유하고있는 것으로 설정합니다 (예 : iOS 4.2). 이것은 나를 위해 리팩터링을 활성화했습니다.


1

또한 xcode 외부에서 또는 Ctrl 키를 누른 채로 파일 이름을 클릭 한 다음 이름을 변경하여 클래스의 파일 이름을 변경할 수 있습니다. xcode는 파일 이름이 클래스 이름과 일치하지 않으면 리팩터링을 거부합니다.


1

클래스의 헤더 파일로 이동하여 다음과 비슷한 줄을 찾습니다.

@interface YourClassName

클래스 기호 (예 : YourClassName)를 마우스 오른쪽 버튼으로 클릭하면 Refactor-> Rename ...을 선택할 수 있습니다.

나는 이것을 시도했고 Xcode 5에서 작동합니다.


0

이 문제도 있었다. 위에서 언급 한대로 누락 된 SDK를 찾고, 파일을 저장하고, Objective-C ++ 코드를 찾으려고 노력했고, 내 컴퓨터를 수정하는 데 필요한 것은 XCode를 재부팅하는 것뿐이었습니다.

아직도 약간 버그가있는 것 같습니다.

BTW, 이것은 XCode 4.0.1 용이었습니다.


-1

프로젝트 탐색기에서 파일 이름을 먼저 변경하면 리팩토링이 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.