Đổi tên một lớp trong Xcode: Refactor… bị chuyển sang màu xám (bị tắt). Tại sao?


112

Tại sao Refactor ... bị chuyển sang màu xám (bị tắt) trong Xcode?

Tôi muốn đổi tên một lớp học.

Câu trả lời:


181

Chọn biểu tượng của lớp trong tệp tiêu đề của nó - tức là bit ngay sau đó @interface. Sau đó, công cụ tái cấu trúc sẽ được kích hoạt.


Tệp tiêu đề của lớp tôi chỉ có @interface, không có @class. Nhưng việc chọn biểu tượng sau @interface dường như hoạt động.
Elliot

3
@class nếu cho các khai báo chuyển tiếp… s
Jonathan Sterling

Điều này cũng đã làm phiền tôi trong một thời gian. Cảm ơn!
Jonatan Hedborg

Thậm chí điều này không cho phép tái cấu trúc trong xcode 4. Tôi đang trở nên vô vọng, tại sao apple không cải thiện những thứ Refactoring của họ. Có Eclipse để theo dõi, làm thế nào để làm mọi thứ!
karim

@karim - nó không bao giờ làm việc trong Xcode, xem câu trả lời của tôi dưới đây để biết cách giải quyết mà làm việc mỗi lần
Adam

26

Nếu bạn đang sử dụng Objective-C ++ (tức là trộn Objective-C với mã C ++) thì tính năng tái cấu trúc bị tắt trong xcode vì nó không hỗ trợ tái cấu trúc mã C ++.


Rất buồn, gần 2 năm sau và nó vẫn không cấu trúc lại các đối tượng Objective-C.
christophercotton

@christophercotton Hãy thử gần 8 năm sau, và nó vẫn không được triển khai.
Alex,

7

Refactor cũng có thể bị tắt nếu các tệp bị ảnh hưởng (rất có thể là tệp có lớp của bạn trong đó) không được lưu.


1
Lưu tệp xib trong Trình tạo giao diện đã bật lại Tính năng tái cấu trúc cho tôi, khi ngay cả việc khởi chạy lại Xcode cũng không giúp được gì, cảm ơn!
Vincent Gable

1
+1 cho điều này. Một số góc của XCode vẫn có những vùng gồ ghề và đây là một trong số đó. Đôi khi nếu việc lưu không cho phép tái cấu trúc, thì việc xây dựng lại sẽ xảy ra.
memmons

6

Tôi đã sử dụng Xcode được 5 năm rồi và việc tái cấu trúc chưa bao giờ hoạt động chính xác (ngay cả xcode 4.6 cũng có những lỗi lớn mà nó SẼ làm hỏng mã nguồn của bạn!).

Giải pháp thay thế luôn là (vẫn hoạt động 100%, ngay cả trong trường hợp mã của Apple bị lỗi)

  1. sử dụng shift-command-f để tìm tất cả các mục đích sử dụng của tệp
  2. chọn "thay thế" trong cài đặt tìm kiếm
  3. "thay thế tất cả"
  4. thực hiện như sau cho tệp .h và LẶP LẠI NÓ CHO Tệp .m (nếu bạn có):
    1. nhấp chuột phải vào tệp gốc và chọn "hiển thị trong công cụ tìm"
    2. xóa tệp khỏi xcode (chọn "chỉ xóa tài liệu tham khảo" khi được hỏi)
  5. đổi tên .h (và .m nếu bạn có) trong Finder
  6. trong Xcode, chọn "Sản phẩm -> (giữ phím Alt) -> Dọn dẹp Thư mục Bản dựng"
  7. thoát khỏi xcode (bạn thường có thể thoát khỏi việc không làm điều này - nhưng LƯU Ý: có một số lỗi CHỦ YẾU khác trong Xcode khiến nó tự sập nếu bạn không làm điều này)
  8. mở lại xcode
  9. kéo / thả .h và .m trở lại Xcode
  10. đợi một vài giây (một số phương pháp cốt lõi của Xcode là không đồng bộ - cho phép nó làm hỏng dự án của bạn)
  11. cuối cùng, khi nó dường như không làm gì cả (và đĩa cứng của bạn không phát ra tiếng ồn nữa): cmd-b để xây dựng lại

Tôi có tỷ lệ thành công 100% với phương pháp này. Tôi vừa thử cấu trúc lại bằng "Refactor -> Rename" của Apple trong xcode mới nhất và nó không thành công - một lần nữa!

(lần này với lỗi không chính xác: "Không thể xác định ngôn ngữ của", một trong những thông báo lỗi mà Apple đã đặt sai văn bản tại chỗ)


Đúng, tôi đã thử điều này gần đây (tháng 5 năm 2014) và menuoption "refactor" chính thức của Xcode vẫn bị hỏng, nó vẫn làm hỏng mã nguồn của bạn. Tôi ngạc nhiên là nhân viên Apple không thấy phiền vì điều này.
Adam

3

Tôi sẽ đến dự án của mình tại công cụ tìm kiếm, sau đó thay đổi tên tệp bằng cách lấy thông tin .

Sau đó, tại xcode -> Project Navigator, tôi xóa các tệp.

Cuối cùng, tôi nhấp chuột phải vào lớp và Thêm tệp vào ... , và thêm lại các tệp này.

Nó đã làm việc cho tôi.


2

Đối với tôi, tôi nhận ra rằng Refactor đã bị vô hiệu hóa vì dự án Xcode tôi đã mở đang tham chiếu đến SDK cơ sở bị thiếu. Chỉnh sửa Cài đặt Dự án và trong tab Xây dựng, đặt SDK Cơ sở thành SDK mà bạn có (giống như đối với tôi, đây là iOS 4.2). Điều này đã kích hoạt Refactor cho tôi.


1

Ngoài ra, có thể xảy ra trường hợp bạn đổi tên tên tệp cho lớp, bên ngoài xcode hoặc bằng cách nhấn ctrl-nhấp vào tên tệp và sau đó đổi tên nó. xcode từ chối cấu trúc lại nếu tên tệp không khớp với tên lớp.


1

Chuyển đến tệp tiêu đề của lớp bạn và tìm dòng giống như sau:

@interface YourClassName

Nhấp chuột phải vào biểu tượng lớp (ví dụ: YourClassName) và bạn có thể chọn Refactor -> Rename ...

Tôi vừa thử điều này và nó hoạt động trong Xcode 5.


0

Cũng có vấn đề này. Tôi đã cố gắng tìm các SDK bị thiếu, lưu tệp và tìm kiếm mã Objective-C ++ như đã đề cập ở trên và tất cả những gì cần thiết để sửa máy của tôi là khởi động lại XCode.

Có vẻ vẫn còn một chút lỗi.

BTW, cái này dành cho XCode 4.0.1


-1

Tái cấu trúc hoạt động Nếu lần đầu tiên bạn thay đổi tên tệp trong trình điều hướng dự án.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.