Xcode: kod traci kolorowanie składni

80

Zauważyłem, że w różnych sytuacjach kod Objective-C w Xcode 3.1 (Leopard) może nie uzyskać odpowiedniego kolorowania składni po wpisaniu lub stracić kolorystykę, którą miał.

Problem ten nie dotyczy tylko „odświeżania” nowych symboli niestandardowych, ale dotyczy również symboli struktury Cocoa.

Czasami CMD-a, aby zaznaczyć cały tekst na stronie kodowej, spowoduje pojawienie się (ponownego) kolorowania, czasami dwukrotne kliknięcie linii, aby ją zaznaczyć, zadziała, czasami muszę dodać / usunąć spację w symbolu, aby uzyskać ten symbol do (ponownego) koloru. Przebudowa lub zamknięcie / ponowne otwarcie projektu może, ale nie musi, działać.

Czy to znany problem z Xcode? Jeśli chodzi o coś tak irytującego, nie znajduję wielu dyskusji na ten temat w SO i innych miejscach, których bym się spodziewał.

Czy jest jakieś polecenie wymuszające globalne ponowne kolorowanie składni?

ColorMeFamous
źródło
Sprawdź także moją odpowiedź tutaj stackoverflow.com/questions/1627033/…
Gajendra K Chauhan

Odpowiedzi:

148

1.) Przejdź do Project -> Build Settings -> Header Search Paths

2.) Dodaj „$ (SRCROOT) / **”

3.) Zamknij i ponownie załaduj projekt

4.) Idź do Xcode -> Okno -> Organizator -> Projekty -> $ YourProject -> Usuń pochodne dane

5.) Poczekaj chwilę, aż XCode odbuduje wszystkie wskazania


Aby uzyskać więcej informacji, aktywuj szczegółowe rejestrowanie:

1.) Zwiększ poziom dziennika Xcode w aplikacji Terminal: domyślnie napisz com.apple.dt.Xcode IDEIndexingClangInvocationLogLevel 3

2.) Otwórz aplikację Console. Wyszukaj „xcode”

3.) Widziałem błąd „nie znaleziono pliku” dla plików nagłówkowych wymienionych w pliku pch (stąd poprawka powyżej)

Lars Schneider
źródło
2
druga część Twojej odpowiedzi była bardzo pomocna!
Denis Mikhaylov
2
Moje doświadczenie z laboratoriów w WWDC w tym roku polegało na tym, że jeśli chcesz, aby podświetlanie składni działało, całkowicie wyłącz prekompilację ... zadziałało dla mnie, ale wydaje się, że jest to niewystarczająca poprawka
Stew
Dzięki, @Lars schneider. to miły sposób.
Tirth,
2
Wielkie dzięki! # 4 (usuwanie danych pochodnych) również działał dla mnie.
Mark Mckelvie,
1
Działało to dla mnie w Xcode 8.3, podczas gdy inne rozwiązanie, które wcześniej działało pod 8.2, przestało przywracać podświetlanie składni. Świetna, ponadczasowa odpowiedź!
Adrian
43

Miałem ten sam problem z projektem, który był w porządku w Xcode 3 i dla którego podświetlanie składni i uzupełnianie kodu zepsuło się w Xcode 4. Zajęło mi to większą połowę dnia, zanim to rozgryzłem, ale stwierdziłem, że poniższe kroki odtworzyć / naprawić problem w 100% dla mnie.

Po wypróbowaniu wszystkich wyżej wymienionych rozwiązań bezskutecznie, próbowałem stworzyć projekt od zera i skrupulatnie ponownie zaimportować każdy plik i folder. Za każdym razem, gdy importowałem kilka plików, sprawdzałem i podświetlanie składni nadal działało. Nawet po kilku ostatnich z nich nadal tak było. Następnie trafiłem na kompilację, która się nie powiodła, ponieważ zapomniałem dołączyć kilka typowych plików nagłówkowych do pliku .pch projektu, które znajdowały się w starym projekcie. I wtedy CodeSense znów się zepsuł.

Po dalszych badaniach odkryliśmy, że jeśli zaimportujesz plik nagłówkowy, który z kolei importuje ten sam plik nagłówkowy platformy, co już robi .pch, CodeSense ulegnie awarii. Ta sama konfiguracja nie spowodowała żadnych problemów w Xcode 3.

Przykład:

project.pch

#import <Foundation/Foundation.h>
#import "projectConfig.h"

projectConfig.h

#import <Foundation/Foundation.h>
#import "one.h"
#import "two.h"

A więc usuwając całkowicie niepotrzebne

#import <Foundation/Foundation.h>

dyrektywy z 'projectConfig.h' możesz naprawić podświetlanie, a uzupełnianie kodu również wróci. To znaczy, jeśli twój problem jest taki sam jak mój.

wściekłość
źródło
tak ... po prostu miał ten sam problem ... i rozwiązanie wściekłości go naprawiło.
crosscode
4
Dlaczego to nie jest przegłosowane w stratosferze? Nie zawracałem sobie głowy czyszczeniem wszystkich moich problemów z nagłówkami, a zamiast tego po prostu wyłączyłem opcję Precompile Prefix Header dla mojego celu i wszystko jest w porządku. Wreszcie mogę przenieść cały zespół do 4.2, ponieważ tam się zepsuliśmy.
Rob Booth,
2
To działa! Zrobiłem to samo co @Rob Booth, wyłączyłem "Precompile Prefix Header" (ustawiłem na NO), wyczyściłem mój projekt i usunąłem jego pochodne dane. Podświetlenie mojej składni uruchomiło się ponownie!
hbobenicio
to rozwiązało mój problem. Mój nie był plikiem Foundation, ale niestandardową klasą. Po prostu usunąłem go z pliku .pch, a następnie przeczytałem i usunąłem wszystkie jego wystąpienia w moich innych plikach klas.
Bot,
Dziękuję. :) Dokładnie postępowałem zgodnie z twoim opisem. Usunięto Foundation i UIKit ze wszystkich plików, które zaimportowałem do mojego .PCH.
Timo,
16

Po prostu wybierz plik, który utracił kolorowanie składni, naciśnij Edytor> Kolorowanie składni> (wybierz swój język (Objective c ++ for ex) zamiast „Default”

Emad
źródło
2
To mi się przydarzyło. Nie jestem pewien, dlaczego XCode miałby domyślnie używać Generic zamiast właściwego typu pliku tylko dla jednego pliku, ale ten krok rozwiązał problem. Najpierw próbowałem wyczyścić i usunąć dane pochodne, co, jak sądziłem, było winowajcą.
Rudi
okrzyki ... Apple wybierało dla mnie AppleScript lol dzięki kolego
Bikram Thapa
7

Odkryłem, że najlepszym sposobem na odzyskanie kolorowania składni jest po prostu zamknięcie Xcode i ponowne uruchomienie. Nie mogłem ci powiedzieć dlaczego, ale to działa za każdym razem.

todd412
źródło
1
Dla mnie wystarczyło nawet ponowne otwarcie projektu.
thgc
Jakie to szalone! Nie tylko naprawiło to wyróżnienie kategorii, która wcześniej
zawodziła, ale
4

Uważam, że poniższe rozwiązania często wystarczają …

„Wybierz ponownie” zarówno „Podstawowy SDK” - jak i „Architektura” - w „Ustawieniach kompilacji”. (Kliknij niebieską ikonę projektu w lewym górnym rogu, będąc w „trybie przeglądarki”, aka 1, a następnie kliknij ustawienia projektu i pomieszaj tam.

Upewnij się, że wszyscy ustawiają się w kolejce / nie zaszkodzi zrobić trochę toggly-wogggating tam, kiedy tam jesteś… wiesz, po prostu trochę to pomieszaj. Zauważysz, że xCode ma malutki mini-skok - za każdym razem, gdy przełączasz się między 64 a 32 bitami… Dzieje się tak zwykle, gdy wiem, czy podświetlanie kodu jest martwe na noc, czy też mogę iść.

Często będę mieć projekt, który jest podświetlany natychmiast w trybie 32-bitowym i po prostu siedzi tam w 64… Kto wie… Ahh, Xcode, ty głupi głupku.

Alex Gray
źródło
1
Odpowiedź bardzo mi pomogła i zadziałała ... Ale Twój styl pisania można by poprawić :)
ItalyPaleAle
Z perspektywy czasu, tak, ta odpowiedź może być rzeczywiście niezrozumiała dla każdego, kto nie jest językiem ojczystym języka angielskiego. Niestety, dla mnie ... to hillairballs .
Alex Gray
3

Wybierz swój projekt -> zakładka Ustawienia kompilacji -> Język Apple LLVM 5.0 -> Prekompiluj nagłówek prefiksu na TAK. NSLog nie wyróżniał. Obecnie działa Xcode 5.0.1 Mam nadzieję, że to pomaga =) Dzięki @rebelzach

Rob Mcelvenny
źródło
2

Mogę potwierdzić 100% rozwiązanie tego problemu na podstawie pytania, które zadałem (i faktycznie odpowiedziałem), jak pokazano poniżej. Jedną rzeczą, którą dodam, jest to, że czasami są to „błędne białe znaki”, które mogą również przyczyniać się do utraty podświetlenia. Możesz to wyczyścić samodzielnie lub skorzystać z wtyczki Goggle Toolbox for Mac Xcode 4, która dodaje wpis w Editmenu XCode o nazwie Clean Up Whitespace.

wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

Alex Gray
źródło
2

Wydaje się, że jest to podobny błąd z tego pytania

Udało mi się rozwiązać ten problem przez ustawienie Precompile Prefix Headersię Now ustawieniach kompilacji.

rebelzach
źródło
1

Niedawno miałem podobny problem, wszystkie funkcje kolorowania i autouzupełniania przestały działać dla wbudowanych frameworków, moje własne klasy nadal działały. Ktoś mi zalecił wyłączenie opcji „Uruchom Analizator Statyczny” w ustawieniach kompilacji. To dziwne, ale zadziałało.

Cory Kilger
źródło
1

Dla mnie było to, że zmieniłem nazwę mojego projektu i Testy cel nadal wskazywał na starą lokalizację pch, ale cel mojej aplikacji wskazywał na nowy.

Jeśli delegat aplikacji nadal ma wyczucie kodu, może tak być również w Twoim przypadku. Przejdź do projektu, wybierz prefiks wyszukiwania docelowego „Testy” i ustaw go na równoważną wartość w celu „aplikacja”.

atlex2
źródło
0

Otwórz ustawienia projektu ( menu Projekt> Edytuj ustawienia projektu ), a następnie kliknij przycisk Odbuduj indeks wyczuwania kodu w sekcji Ogólne karcie . Spowoduje to odtworzenie indeksu używanego przez Xcode do kolorowania składni.

W przypadku większych projektów ten proces może trochę potrwać, więc postęp można sprawdzić w oknie Czynność ( menu Okno> Czynność ).

Rob Keniger
źródło
2
Raz po raz to nie rozwiązuje problemu. Muszę robić coś nie tak, ponieważ XCode po prostu nie zawraca sobie głowy podświetlaniem składni ani wyświetlaniem automatycznego uzupełniania.
Jessedc,
1
Upewnij się, że rejestrujesz w firmie Apple błędy dotyczące tego rodzaju problemów: bugreport.apple.com.
Lyndsey Ferguson
0

Co więcej, w XCode4 nie ma przycisku do odbudowy indeksu wyczuwania kodu.

Sunil Gowda
źródło
Czytałem gdzieś, że prawdopodobnie dzieje się tak dlatego, że XCode4 nie potrzebuje już indeksu rozpoznawania kodu. Myślę, że korzysta bezpośrednio z nowej analizy składni Clang zamiast utrzymywać oddzielny indeks. Z tego powodu sugestie dotyczące kodu są znacznie dokładniejsze, ponieważ sugerują tylko uzupełnienia kodu, które mają sens z punktu widzenia kompilatora.
markquezada
1
Okazuje się, że jest sposób - stackoverflow.com/questions/1627033/…
Arkaaito
0

Miałem ten sam problem i rozwiązałem go, aktualizując ustawienia kompilacji, aby używały domyślnego kompilatora systemu, LLVM GCC 4.2.

Wydaje się, że jest wiele czynników.

Mikey
źródło
0

Ja również napotykam ten problem i wypróbowałem rozwiązania: „odbudowanie indeksu”, „ponowne uruchomienie XCode”, „zmiana ustawień kompilatora na LLVM GCC 4.2”. To mi nie pomogło.

Próbowałem więc od razu dodać następujący kod wraz ze świeżym utworzeniem pliku nagłówkowego.

#include "header.h"

using namespace cocos2d

Następnie kod dodany wcześniej w pliku nagłówkowym jest kolorowany i może rozpoznawać klasy i inne rzeczy.

Użyłem cocos2d-x, więc moja składnia jest oparta na C ++. Nie testuję tego jeszcze z Objective-c.

haxpor
źródło
0

Bo ktoś wciąż nie wie dlaczego. Otwórz z XCode 8.2 , powinno działać

Hieu Tran
źródło