Temukan referensi metode dalam Xcode

174

Apakah ada cara di Xcode untuk menemukan semua tempat di mana metode atau properti telah dipanggil?

Di Eclipse, misalnya, Anda dapat mengklik kanan suatu metode dan memilih Temukan referensi . Apakah ada yang serupa di Xcode?

Java Ka Baby
sumber

Jawaban:

252
  1. Pilih metode yang Anda minati, atau posisikan kursor teks di dalamnya.
  2. Buka menu "File Terkait" melalui ikon di kiri atas Editor. (Ini tombol langsung ke kiri tombol kembali).
  3. Pergi ke submenu "Penelepon" untuk daftar semua metode yang memanggil metode yang dipilih, dan klik salah satu dari mereka untuk melompat ke file dan metode itu.

Dalam gambar ...

Cuplikan layar langkah 1 dan 2 di atas.

Tangkapan layar langkah 3 di atas

Beberapa catatan:

  • Anda dapat melakukan ini untuk properti juga.
  • Perhatikan bahwa ketika Anda memilih metode panggilan dari menu Penelepon untuk melompat ke tempat metode Anda dipanggil, Xcode hanya menyoroti panggilan pertama . Setiap metode panggilan hanya akan muncul di daftar 'Penelepon' sekali, meskipun itu berisi banyak panggilan ke metode Anda. Jadi, jika Anda mencoba membuat beberapa perubahan di setiap tempat dalam aplikasi Anda di mana metode dipanggil, berhati-hatilah untuk tidak melewatkan beberapa di tempat-tempat di mana metode panggilan berisi dua panggilan ke metode yang Anda minati.
Mark Amery
sumber
34
Pintasan default untuk membuka menu ^1jadi saya biasanya dapat menekan ^1, c, enteruntuk membuka daftar.
Peter Theill
Ini menemukan semua Penelepon dari metode dan implementasi induk. Apakah ada cara untuk menemukan Penelepon hanya dari implementasi ini?
Daniel Kaplan
1
@DanielKaplan saya kira tidak, karena setidaknya dalam beberapa kasus kompiler tidak akan memiliki cara untuk mengetahui implementasi yang akan dipanggil.
Mark Amery
Metode saya dipanggil init, dan ini memunculkan metode apa pun yang dinamai initjuga. Tidak begitu pintar ...
Nathan H
36

Ya, buka editor Asisten dan alih-alih Rekanan pilih Penelepon.

masukkan deskripsi gambar di sini

Alex Terente
sumber
1
Anda tidak harus menggunakan editor terbagi untuk ini, meskipun mungkin nyaman jika Anda akan mengedit banyak metode panggilan secara berurutan. Lihat jawaban saya.
Mark Amery
18

Pada XCode 4.5 Anda dapat mengklik "Tampilkan opsi temukan" dalam bidang pencarian di Navigator Pencarian. Di sana Anda dapat menentukan "Referensi Simbol"

masukkan deskripsi gambar di sini

SystematicFrank
sumber
2
Ini adalah sedikit peningkatan dibandingkan pencarian telanjang, tetapi mengembalikan semua referensi, bukan hanya yang Anda cari. Misalnya, jika Anda memiliki kelas dengan properti "tinggi", mencari referensi simbol pada properti tinggi Anda akan mengembalikan referensi ke semua jenis properti tinggi lainnya yang Anda gunakan, jadi Anda masih harus menyaring hasil untuk menemukan yang Anda ingin. Untuk retasan yang bekerja dengan cukup baik, lihat ini: stackoverflow.com/a/5457479/850721
Mike Lorenz
11

Pilih fungsi, tekan cmd-shift-A, "Penelepon"

masukkan deskripsi gambar di sini

Uladzimir
sumber
7

Tempatkan titik penyisipan dalam doa atau deklarasi metode dan pilih Temukan> Temukan Simbol yang Dipilih Dalam Proyek. Untuk penyeleksi multi-bagian, ini hanya akan menyoroti bagian pertama tetapi pencarian tampaknya bekerja relatif andal. Anda juga dapat menggunakan Hierarki Temukan Panggilan yang menyoroti seluruh baris sebagai gantinya.

Item menu kontekstual yang sesuai (Cari Simbol yang Dipilih di Workspace) juga berfungsi, tetapi agak sulit untuk membuatnya berfungsi dengan baik. Pastikan tidak ada teks yang dipilih jika tidak akan mencari kata yang dipilih daripada seluruh pemilih. Untuk melakukannya, Anda dapat mengklik dengan tombol kiri mouse sebelum mengklik dengan tombol kanan mouse (atau mengklik Control) di lokasi yang sama. Tidak ada masalah dengan Hierarki Find Call kontekstual.

Nicholas Riley
sumber
ini juga sangat berguna untuk memiliki cara pintas keyboard yang sama, debugging menjadi jauh lebih cepat
Naishta
-11

Dengan xcode 4 Anda sekarang dapat mengklik kanan pada referensi dan memilih "lompat ke definisi."

Scott Looze
sumber
12
Itu menjawab pertanyaan sebaliknya.
Richard