Xcodeでメソッド参照を検索する


174

Xcodeに、メソッドまたはプロパティが呼び出されたすべての場所を見つける方法はありますか?

たとえば、Eclipseでは、メソッドを右クリックして[ 参照の検索 ]を選択できます。Xcodeに同様のものはありますか?

回答:


252
  1. 目的の方法を選択するか、テキストカーソルをその中に置きます。
  2. エディターの左上にあるアイコンから「関連ファイル」メニューを開きます。(これは、[戻る]ボタンのすぐ左にあるボタンです)。
  3. 選択したメソッドを呼び出すすべてのメソッドのリストの「呼び出し元」サブメニューに移動し、それらのいずれかをクリックすると、そのファイルとメソッドにジャンプします。

写真で...

上記のステップ1と2のスクリーンショット。

上記のステップ3のスクリーンショット

いくつかのメモ:

  • プロパティに対してもこれを行うことができます。
  • [呼び出し元]メニューから呼び出しメソッドを選択してメソッドが呼び出された場所にジャンプすると、Xcodeは最初の呼び出しのみを強調表示することに注意してください。メソッドへの多数の呼び出しが含まれている場合でも、各呼び出しメソッドは「呼び出し元」リストに一度だけ表示されます。そのため、メソッドが呼び出されるアプリケーションのすべての場所で変更を加えようとしている場合は、呼び出しメソッドに、関心のあるメソッドへの2つの呼び出しが含まれている場所でいくつか変更しないように注意してください。

34
メニューを表示する^1ためのデフォルトのショートカットなので、通常はを押し^1, c, enterてリストを表示できます。
Peter Theill 2013年

これにより、メソッドのすべての呼び出し元と親の実装が検索されます。この実装のみの呼び出し元を見つける方法はありますか?
Daniel Kaplan

1
@DanielKaplan私はそうは思いません、少なくともいくつかのケースでは、コンパイラはどの実装が呼び出されるべきかを知る方法がないからです。
Mark Amery

私のメソッドはと呼ばれinit、これにより名前付きのメソッドも表示さinitれます。それほどスマートではない...
ネイサンH

36

はい、アシスタントエディターを開き、カウンターパートの代わりに発信者を選択します。

ここに画像の説明を入力してください


1
分割エディターを使用する必要はありません、多数の呼び出しメソッドをすばやく連続して編集する場合に便利です。私の答えを見てください。
マークアメリー2013

18

XCode 4.5以降では、検索ナビゲーターの検索フィールド内で[検索オプションを表示]をクリックできます。そこで「シンボル参照」を指定できます

ここに画像の説明を入力してください


2
これは、ベアサーチよりもわずかに改善されていますが、探している特定のリファレンスだけでなく、すべてのリファレンスが返されます。たとえば、「height」プロパティを持つクラスがある場合、heightプロパティでシンボル参照を検索すると、使用した他のすべての種類の高さプロパティへの参照が返されるため、結果を調べて目的のプロパティを見つける必要があります。欲しいです。かなりうまく機能するハックについては、次を参照してください。stackoverflow.com
Mike Lorenz


7

メソッドの呼び出しまたは宣言に挿入ポイントを置き、「検索」>「プロジェクト内の選択したシンボルを検索」を選択します。マルチパートセレクターの場合、これは最初のパートのみを強調表示しますが、検索は比較的確実に機能するようです。代わりに行全体を強調表示するFind Call Hierarchyを使用することもできます。

対応するコンテキストメニュー項目([ワークスペースで選択したシンボルを検索])も機能しますが、適切に機能させるには少し注意が必要です。テキストが選択されていないことを確認してください。選択されていない場合は、セレクター全体ではなく選択された単語が検索されます。そのためには、同じ場所でマウスの右ボタンをクリック(またはControlキーを押しながらクリック)する前に、マウスの左ボタンをクリックします。コンテキストのFind Call Hierarchyにはそのような問題はありません。


同じことのキーボードショートカットがあると非常に便利です。デバッグが非常に速くなります
Naishta

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.