Rechercher des références de méthode dans Xcode

174

Existe-t-il un moyen dans Xcode de trouver tous les endroits où une méthode ou une propriété a été appelée?

Dans Eclipse, par exemple, vous pouvez cliquer avec le bouton droit sur une méthode et sélectionner Rechercher des références . Y a-t-il quelque chose de similaire dans Xcode?

Bébé Java Ka
la source

Réponses:

252
  1. Sélectionnez la méthode qui vous intéresse ou placez le curseur de texte à l'intérieur.
  2. Ouvrez le menu "Fichiers associés" via l'icône en haut à gauche de l'éditeur. (C'est le bouton immédiatement à gauche du bouton de retour).
  3. Allez dans le sous-menu "Appelants" pour une liste de toutes les méthodes qui appellent la méthode sélectionnée, et cliquez sur l'une d'elles pour accéder à ce fichier et à cette méthode.

En images...

Capture d'écran des étapes 1 et 2 ci-dessus.

Capture d'écran de l'étape 3 ci-dessus

Quelques notes:

  • Vous pouvez également le faire pour les propriétés.
  • Notez que lorsque vous sélectionnez une méthode d'appel dans le menu Appelants pour accéder à l'endroit où votre méthode a été appelée, Xcode met en surbrillance uniquement le premier appel. Chaque méthode d'appel n'apparaîtra qu'une seule fois dans la liste 'Callers', même si elle contient de nombreux appels à votre méthode. Donc, si vous essayez d'apporter des modifications à chaque endroit de votre application où une méthode est appelée, veillez à ne pas en manquer aux endroits où une méthode appelante contient deux appels à la méthode qui vous intéresse.
Mark Amery
la source
34
Le raccourci par défaut pour afficher le menu, ^1donc je peux généralement appuyer sur ^1, c, enterpour afficher la liste.
Peter Theill
Cela trouve tous les appelants de la méthode et les implémentations parentes. Existe-t-il un moyen de rechercher uniquement les appelants de cette implémentation?
Daniel Kaplan
1
@DanielKaplan Je suppose que non, car dans au moins certains cas, le compilateur n'aura aucun moyen de savoir quelle implémentation doit être appelée.
Mark Amery
Ma méthode est appelée init, et cela fait apparaître toute méthode nommée initégalement. Pas si intelligent ...
Nathan H
36

Oui, ouvrez l'éditeur de l'assistant et au lieu d'homologues, sélectionnez Appelants.

entrez la description de l'image ici

Alex Terente
la source
1
Vous n'avez pas besoin d'utiliser l'éditeur de fractionnement pour cela, bien que cela puisse être pratique si vous allez éditer de nombreuses méthodes d'appel en succession rapide. Voyez ma réponse.
Mark Amery
18

Depuis XCode 4.5, vous pouvez cliquer sur "Afficher les options de recherche" dans le champ de recherche du navigateur de recherche. Là, vous pouvez spécifier "Références de symboles"

entrez la description de l'image ici

SystématiqueFrank
la source
2
Il s'agit d'une légère amélioration par rapport à une recherche nue, mais elle renvoie toutes les références, pas seulement celle que vous recherchez. Par exemple, si vous avez une classe avec une propriété "height", la recherche de références de symboles sur votre propriété height renverra des références à toutes sortes d'autres propriétés de hauteur que vous avez utilisées, vous devez donc parcourir les résultats pour trouver celles que vous vouloir. Pour un hack qui fonctionne assez bien, voir ceci: stackoverflow.com/a/5457479/850721
Mike Lorenz
11

Sélectionnez la fonction, appuyez sur cmd-shift-A, "Callers"

entrez la description de l'image ici

Uladzimir
la source
7

Placez le point d'insertion dans un appel ou une déclaration de méthode et choisissez Rechercher> Rechercher le symbole sélectionné dans le projet. Pour les sélecteurs en plusieurs parties, cela ne mettra en évidence que la première partie, mais la recherche semble fonctionner de manière relativement fiable. Vous pouvez également utiliser Find Call Hierarchy qui met en évidence la ligne entière à la place.

L'élément de menu contextuel correspondant (Rechercher le symbole sélectionné dans l'espace de travail) fonctionne également, mais il est un peu plus difficile à faire fonctionner correctement. Assurez-vous qu'aucun texte n'est sélectionné, sinon il recherchera le mot sélectionné plutôt que le sélecteur entier. Pour ce faire, vous pouvez cliquer avec le bouton gauche de la souris avant de cliquer avec le bouton droit de la souris (ou en maintenant la touche Contrôle enfoncée) au même endroit. Il n'y a pas de tel problème avec la hiérarchie contextuelle des appels de recherche.

Nicholas Riley
la source
c'est aussi très utile d'avoir un raccourci clavier pour le même, le débogage devient tellement plus rapide
Naishta
-11

Avec xcode 4, vous pouvez maintenant faire un clic droit sur les références et sélectionner "sauter à la définition".

Scott Looze
la source
12
Cela répond à la question opposée.
Richard