Ubah nama kelas di Xcode: Refactor… berwarna abu-abu (dinonaktifkan). Mengapa?

112

Mengapa Refactor ... berwarna abu-abu (dinonaktifkan) di Xcode?

Saya ingin mengganti nama kelas.

Elliot
sumber

Jawaban:

181

Pilih simbol kelas di file headernya - yaitu bit setelahnya @interface. Kemudian hal refactoring harus diaktifkan.

Noah Witherspoon
sumber
File header kelas saya hanya memiliki @interface, tanpa @class. Tetapi memilih simbol setelah @interface tampaknya berhasil.
Elliot
3
@class if for forward declarations… s
Jonathan Sterling
Ini juga telah mengganggu saya selama beberapa waktu. Terima kasih!
Jonatan Hedborg
Bahkan ini tidak memungkinkan refactoring di xcode 4. Saya menjadi putus asa, mengapa apel tidak meningkatkan hal Refactoring mereka. Ada Eclipse untuk diikuti, bagaimana melakukan sesuatu!
karim
@karim - tidak pernah berhasil di Xcode, lihat jawaban saya di bawah ini untuk solusi yang berhasil setiap waktu
Adam
26

Jika Anda menggunakan Objective-C ++ (yaitu mencampur Objective-C dengan kode C ++) maka pemfaktoran ulang dinonaktifkan di xcode karena tidak mendukung pemfaktoran ulang kode C ++.

Voecking Volker
sumber
Sangat menyedihkan, hampir 2 tahun kemudian dan masih belum bisa merefaktor objek Objective-C.
christophercotton
@Christophercotton Cobalah hampir 8 tahun kemudian, dan masih belum diterapkan.
Alex
7

Refactor mungkin juga dinonaktifkan jika file yang terpengaruh (kemungkinan besar file dengan kelas Anda di dalamnya) tidak disimpan.

klaaspieter.dll
sumber
1
Menyimpan file xib di Interface Builder mengaktifkan kembali Refactoring untuk saya, bahkan ketika meluncurkan ulang Xcode tidak membantu, terima kasih!
Vincent Gable
1
1 untuk ini. Beberapa sudut Xcode masih memiliki area kasar dan ini adalah salah satunya. Terkadang jika penyimpanan tidak memungkinkan pemfaktoran ulang, membangun kembali akan.
memmons
6

Saya telah menggunakan Xcode selama 5 tahun sekarang, dan refactoring tidak pernah bekerja dengan benar (bahkan xcode 4.6 memiliki bug utama yang AKAN merusak kode sumber Anda!).

Solusinya selalu (masih berfungsi 100%, bahkan dalam kasus di mana kode Apple gagal)

  1. gunakan shift-command-f untuk menemukan semua penggunaan file
  2. pilih "ganti" di pengaturan pencarian
  3. "menggantikan semua"
  4. lakukan hal berikut untuk file .h, dan REPEAT IT FOR THE .m FILE (jika Anda punya):
    1. klik kanan file asli, dan pilih "show in finder"
    2. hapus file dari xcode (pilih "hapus referensi saja" jika diminta)
  5. ganti nama .h (dan .m jika ada) di Finder
  6. di Xcode, pilih "Product -> (tahan Alt) -> Clean Build Folder"
  7. keluar dari xcode (Anda biasanya bisa lolos dengan tidak melakukan ini - tetapi CATATAN: ada beberapa bug MAYOR lainnya di Xcode yang macet sendiri jika Anda tidak melakukan ini)
  8. buka kembali xcode
  9. seret / lepas .h dan .m kembali ke Xcode
  10. tunggu beberapa detik (beberapa metode inti Xcode tidak sinkron - memungkinkannya merusak proyek Anda)
  11. terakhir, ketika tampaknya tidak melakukan apa-apa (dan hard disk Anda tidak bersuara lagi): cmd-b untuk membangun kembali

Saya memiliki tingkat keberhasilan 100% dengan metode ini. Saya baru saja mencoba refactoring dengan "Refactor -> Rename" Apple di xcode terbaru dan gagal - lagi!

(kali ini dengan kesalahan yang salah: "Tidak dapat menentukan bahasa", salah satu pesan kesalahan di mana Apple meletakkan teks yang salah)

Adam
sumber
Ya, saya mencoba ini baru-baru ini (Mei 2014) dan opsi menu "refactor" resmi Xcode masih rusak, masih merusak kode sumber Anda. Saya terkejut staf Apple tidak terganggu dengan ini.
Adam
3

Saya akan ke proyek saya di finder, lalu mengubah nama file dengan mendapatkan info .

Setelah itu, di xcode -> Project Navigator saya menghapus file.

Pada akhirnya, saya mengklik kanan di kelas dan Tambahkan file ke ... , dan menambahkan file ini lagi.

Itu berhasil untuk saya.

mengimbangi
sumber
2

Bagi saya, saya menyadari Refactor dinonaktifkan karena proyek Xcode yang saya buka merujuk ke Base SDK yang hilang. Edit Pengaturan Proyek dan di tab Bangun atur SDK Basis ke yang Anda miliki (seperti bagi saya ini adalah iOS 4.2). Ini mengaktifkan Refactor untuk saya.

pengguna591345
sumber
1

Juga, bisa jadi Anda mengganti nama file untuk kelas, baik di luar xcode atau dengan mengklik ctrl pada nama file dan kemudian mengganti namanya. xcode menolak untuk refactor jika nama file tidak cocok dengan nama kelas.

carlos_ms
sumber
1

Pergi ke file header kelas Anda dan temukan baris yang terlihat seperti ini:

@interface YourClassName

Klik kanan pada simbol kelas (misalnya YourClassName) dan Anda harus dapat memilih Refactor -> Rename ...

Saya baru saja mencoba ini dan berfungsi di Xcode 5.

Target mudah
sumber
0

Punya masalah ini juga. Saya mencoba menemukan SDK yang hilang, menyimpan file, dan mencari kode Objective-C ++ seperti yang disebutkan di atas, dan yang diperlukan untuk memperbaiki mesin saya hanyalah me-reboot XCode.

Sepertinya masih sedikit buggy.

BTW, ini untuk XCode 4.0.1

gdavis.dll
sumber
-1

Refactoring berfungsi Jika Anda pertama kali mengubah nama file di navigator proyek.

Chris
sumber