Znajdź odwołania do metod w Xcode


174

Czy istnieje sposób w Xcode, aby znaleźć wszystkie miejsca, w których wywołano metodę lub właściwość?

Na przykład w Eclipse można kliknąć metodę prawym przyciskiem myszy i wybrać opcję Znajdź odniesienia . Czy jest coś podobnego w Xcode?

Odpowiedzi:


252
  1. Wybierz interesującą Cię metodę lub umieść w niej kursor tekstowy.
  2. Otwórz menu „Pliki powiązane” za pomocą ikony w lewym górnym rogu Edytora. (Jest to przycisk znajdujący się bezpośrednio po lewej stronie przycisku Wstecz).
  3. Przejdź do podmenu „Callers”, aby wyświetlić listę wszystkich metod, które wywołują wybraną metodę, i kliknij dowolną z nich, aby przejść do tego pliku i metody.

Na obrazach...

Zrzut ekranu przedstawiający kroki 1 i 2 powyżej.

Zrzut ekranu z kroku 3 powyżej

Kilka uwag:

  • Możesz to zrobić również w przypadku nieruchomości.
  • Zauważ, że po wybraniu metody wywołującej z menu Callers, aby przejść do miejsca, w którym została wywołana Twoja metoda, Xcode podświetla tylko pierwsze wywołanie. Każda metoda wywołująca pojawi się na liście osób wywołujących tylko raz, nawet jeśli zawiera wiele wywołań Twojej metody. Więc jeśli próbujesz wprowadzić jakąś zmianę w każdym miejscu w aplikacji, w którym wywoływana jest metoda, uważaj, aby nie przegapić niektórych w miejscach, w których metoda wywołująca zawiera dwa wywołania metody, którą jesteś zainteresowany.

34
Domyślny skrót do wywoływania menu, ^1więc zwykle mogę nacisnąć, ^1, c, enteraby wyświetlić listę.
Peter Theill

Spowoduje to znalezienie wszystkich wywołań metody i implementacji nadrzędnych. Czy istnieje sposób na znalezienie wywołujących tylko tej implementacji?
Daniel Kaplan

1
@DanielKaplan Myślę, że nie, ponieważ przynajmniej w niektórych przypadkach kompilator nie będzie miał możliwości ustalenia, która implementacja ma zostać wywołana.
Mark Amery

Moja metoda jest wywoływana init, co powoduje wyświetlenie dowolnej metody o nazwie init. Nie taki mądry ...
Nathan H

36

Tak, otwórz edytor asystenta i zamiast odpowiedników wybierz rozmówców.

wprowadź opis obrazu tutaj


1
Nie musisz do tego używać edytora podziału, chociaż może to być wygodne, jeśli zamierzasz edytować wiele metod wywoływania w krótkich odstępach czasu. Zobacz moją odpowiedź.
Mark Amery,

18

Od wersji XCode 4.5 możesz kliknąć „Pokaż opcje wyszukiwania” w polu wyszukiwania Nawigatora wyszukiwania. Tam możesz określić „Odniesienia do symboli”

wprowadź opis obrazu tutaj


2
Jest to niewielka poprawa w stosunku do samego wyszukiwania, ale zwraca wszystkie odwołania, a nie tylko tę, której szukasz. Na przykład, jeśli masz klasę z właściwością „height”, wyszukiwanie odniesień do symboli we właściwościach wysokości zwróci odniesienia do wszystkich innych użytych właściwości wysokości, więc nadal musisz przejrzeć wyniki, aby znaleźć te, które chcieć. Aby zobaczyć hack, który działa całkiem nieźle, zobacz: stackoverflow.com/a/5457479/850721
Mike Lorenz


7

Umieść punkt wstawiania w wywołaniu metody lub deklaracji i wybierz polecenie Znajdź> Znajdź wybrany symbol w projekcie. W przypadku selektorów wieloczęściowych podświetli to tylko pierwszą część, ale wyszukiwanie wydaje się działać stosunkowo niezawodnie. Możesz także użyć funkcji Znajdź hierarchię połączeń, która zamiast tego podświetli całą linię.

Odpowiednia pozycja menu kontekstowego (Znajdź wybrany symbol w obszarze roboczym) również działa, ale jej poprawne działanie jest nieco trudniejsze. Upewnij się, że żaden tekst nie zostanie zaznaczony, w przeciwnym razie wyszuka wybrane słowo, a nie cały selektor. Aby to zrobić, możesz kliknąć lewym przyciskiem myszy przed kliknięciem prawym przyciskiem myszy (lub kliknięciem z wciśniętym klawiszem Control) w tym samym miejscu. Nie ma takiego problemu w przypadku kontekstowej hierarchii wywołań wyszukiwania.


bardzo przydatne jest również posiadanie skrótu klawiaturowego do tego samego, debugowanie jest znacznie szybsze
Naishta

-11

Dzięki xcode 4 możesz teraz kliknąć prawym przyciskiem myszy odniesienia i wybrać „przejdź do definicji”.


12
To odpowiada na przeciwne pytanie.
Richard,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.