Autouzupełnianie Xcode 9 nie działa w 100% - częściowo działa

121

Dziś rano Xcode 9.0 (9A235) pokazuje nowe / dziwne okno autouzupełniania, które wcale nie jest tym, czym było. Jak uzyskać pełne pole autouzupełniania, aby autouzupełnianie wyglądało tak, jak zwykle?

wprowadź opis obrazu tutaj

Ernie
źródło
1
Usunięcie folderu DERIVED DATA rozwiązało to za mnie. Dzięki kolejnemu postowi. Dzięki temu postowi: stackoverflow.com/questions/28429630/…
Ernie
Prawdopodobnie dzieje się tak, ponieważ indeksowanie nie zostało jeszcze zakończone.
ozgur
1
Wypróbowałem każde zaproponowane rozwiązanie i nic nie pomogło w jednym z moich projektów 🙁
Alexander Vasenin
3
11.3 to katastrofa w tej kwestii. Często po prostu ponowne uruchomienie Xcode pomaga: /
Fattie

Odpowiedzi:

236

Próbować:

  1. Przejdź do Xcode> Preferencje> Edycja tekstu
  2. W obszarze Uzupełnianie kodu - odznacz „Sugeruj uzupełnianie podczas pisania”
  3. Wyjdź z Xcode, a następnie ponownie uruchom Xcode.
  4. Idź do Xcode> Preferencje> Tekst Edycja ponownie
  5. Wyjdź z Xcode, a następnie ponownie uruchom Xcode.
  6. Teraz przejdź do Kończenie kodu i zaznacz „Sugeruj uzupełnianie podczas pisania”.
  7. Spróbuj wpisać funkcję biblioteki lub enum i ciesz się!
Lal Krishna
źródło
2
niesamowite rozwiązanie. bardzo dziwne. Zastanawiam się, jak to powieliłeś.
Kunal Gupta
1
Odpowiedź za milion dolarów. To nawet naprawiło „Jump to Definition”.
OutOnAWeekend
Nadal wymagane w Xcode 11.2, dziękuję za ten dziwny sposób na życie :-)
Rocket Garden
Ten błąd w Xcode, jak zawsze, nowe aktualizacje stwarza nowe problemy, działającym rozwiązaniem dla mnie jest: 1- Całkiem Xcode. 2- poczekaj kilka sekund. 3- Otwórz Xcode, ale niczego nie dotykaj, nawet nie klikając gdzieś w edytorze. 4- Poczekaj, aż indeksowanie zostanie zakończone. Autouzupełnianie działa teraz.
Shahriar
1
Nadal konieczne w XCode 11.5, Catalina, lipiec 2020 r. Wielkie dzięki!
Reuben Scratton
30

Rzeczy do wypróbowania:

1

Uruchom to polecenie w katalogu projektu, jeśli używasz cocoapods:

rm -rf ~/Library/Caches/CocoaPods;
rm -rf Pods; rm -rf ~/Library/Developer/Xcode/DerivedData/*;
pod deintegrate; pod setup; pod install;


2

Wyczyść dane w pamięci podręcznej

Wyczyść projekt -> Cmd + Shift + K.

Wyczyść folder kompilacji -> Cmd + Shift + Option + K.

Jeśli pominąłeś krok pierwszy:
Usuń pochodne dane
Xcode Preferences-> Locations->
Symbol strzałki przenosi do DerrivedData-> Usuń folder


3

Sprawdź źródła kompilacji w fazie budowy.

Każdy plik .swifti .mw projekcie powinien znajdować się na tej liście, w przeciwnym razie nie zostanie on automatycznie uzupełniony w tych plikach.


4

Zoptymalizuj swój edytor:

Użyj fileprivate dla każdej właściwości i funkcji klasy, które możesz zmniejszyć zakres pracy kompilatorów na element.

Napisz kod modularny / OOP, aby mieć mniej kodu do odczytania przez kompilator.

Unikaj stosowania wnioskowania o typie, gdy wynikiem jest złożona kalkulacja, i spróbuj rozbić złożone obliczenia na let this = smallerOperationinstrukcje

Sethmr
źródło
W XCode 9.2 nie ma już symbolu strzałki w folderze danych pochodnych. Dzięki za wskazówkę dotyczącą plików prywatnych. Koszmar trwa ...
Sal
Nadal widzę symbol strzałki. Czy to było we wcześniejszej wersji 9.2 czy coś?
Sethmr
28

Xcode w wersji 11.0 (11A420a)

Wypróbowałem rozwiązanie firmy Lal Krishna dla Xcode V11.0. Udało się kilka razy, ale później nie uzyskałem rezultatu.

Znalazłem jedno rozwiązanie. Musisz usunąć dwa pliki:

  1. Library / Developer / Xcode / Derived Data (jak opisano wcześniej)
  2. Library / Developer / Xcode / UserData / IDEEditorInteractivityHistory

To rozwiązanie teraz mi pomaga. Może być przydatny dla innych 😉

Kostiantyn Bykhkalo
źródło
3
pracował dla mnie. Chcę tylko powiedzieć, że Visual Studio 2002 (!) Był lepszy niż Xcode 2009-2019. Przez te wszystkie lata Xcode jest pełen błędów. Nie rozumiem, dlaczego Apple nie dba o programistów. Xcode stworzone przez programistów! (Musiałem to wyrzucić)
user1105951,
To działa dla mnie: zamknij Xcode, usuń 2 foldery, jak powiedziałeś, ponownie uruchom Xcode i wszystkie problemy zniknęły: D
phuongzzz
20

Może się to zdarzyć, gdy plik nie jest członkiem elementu docelowego. Otwórz plik, w którym autouzupełnianie nie działa i pokaż kartę „Narzędzia” w prawym górnym rogu Xcode (niebieski na zrzucie ekranu poniżej). Zrzut ekranu przycisków widoku w prawym górnym rogu Xcode

Zrzut ekranu z opcjami członkostwa Xcode Target

Upewnij się, że element docelowy (zazwyczaj nazwa aplikacji) jest zaznaczony. Autouzupełnianie powinno działać niemal natychmiast, bez ponownego uruchamiania Xcode, czyszczenia lub usuwania danych pochodnych.

Jeśli jest już zaznaczona, odznacz ją i zaznacz ponownie. Dla mnie to załatwiło sprawę.

Isaiah Turner
źródło
działało tylko otwarcie tej strony i zamknięcie. Jestem zmieszany. Dzięki przy okazji.
Okhan Okbay,
To działało na xcode 10. Plik rzeczywiście był już członkiem celu. Musiałem odznaczyć, a następnie ponownie sprawdzić, czy został rozpoznany jako taki.
Jim75
zdarzyło mi się to po scaleniu git, myślę, że jedna gałąź napisała na moim bieżącym pliku projektu, a druga nie została poprawnie scalona z tym.
Asfand Shabbir
11

Używam Xcode 10.2 i miałem ten sam problem.

Ta odpowiedź od Axel pomógł mi naprawić.

W każdym razie opiszę trochę więcej:

  1. Przejdź do YourProject.xcodeproj, klikając prawym przyciskiem myszy i otwórzShow Package Contents
  2. Przejdź do xcuserdatai usuńyouruser.xcuserdatad

Jeśli masz również xcworkspace(jeśli masz już zainstalowane jakieś strąki ), wykonaj krok 3 i 4, jeśli nie, po prostu pomiń krok 3 i 4:

  1. Przejdź do YourProject.xcworkspace, klikając prawym przyciskiem myszy i otwórzShow Package Contents
  2. Przejdź do xcuserdatai usuńyouruser.xcuserdatad

  3. Zamknij Xcode

  4. Usuń dane pochodne za pomocą terminala:

rm -rf ~ / Library / Developer / Xcode / DerivedData

  1. Otwórz Xcode i sprawdź, czy działa.

wprowadź opis obrazu tutaj

Gent Berani
źródło
11

Może się to również zdarzyć, jeśli nadmiarowo nazwałeś swoje pliki. Na przykład,

Data.swift

Data.swift

ScottyBlades
źródło
1
W moim przypadku to był problem, mam tę samą nazwę pliku w 2 różnych folderach
Raj
To też mi się przytrafia. Dwa pliki ViewController
Shark Deng
1
W moim przypadku miałem wirtualną grupę o nazwie ABC i plik w tej grupie o nazwie ABC.swift. Zmiana nazwy pliku naprawiła ten problem. Dzięki
Rem-D
7

Usunięcie pliku z celów testowych rozwiązało mój problem.

Martin Jun
źródło
Pracował dla mnie. Dzięki
Duan Nguyen
nie mogłem tego znaleźć
Ryan110
5

Spróbuj to zrobić:

Wybierz plik >> sprawdź, czy plik został dodany do celów UITesting lub UnitTesting (Inspektor plików -> Członkostwo docelowe) . Jeśli tak, usuń zaznaczenie tych dwóch i upewnij się, że wybrany jest tylko cel projektu. Następnie skompiluj i spróbuj, czy autouzupełnianie działa poprawnie.

To zadziałało dla mnie. Mam nadzieję, że to komuś pomoże.

abhimuralidharan
źródło
5

Oto trochę obejścia, ale działa.

  1. Wyczyść projekt ... Command + Shift + K

  2. Wyczyść folder kompilacji ... Command + Shift + Opcje (Alt) + K

  3. Usuń dane pochodne projektu ... Można to zrobić za pomocą tego linku:

    Jak mogę usunąć dane pochodne w Xcode 9?

  4. Zamknij XCode.

  5. Otwórz ponownie XCode (pozwól na zakończenie indeksowania) i skompiluj projekt ... Command + B

Po zakończeniu budowy sugestie wrócą. Próbowałem tego dwa razy.

Aktualizacja:

Czasami problem może być tak prosty, jak zduplikowane nazwy plików. Uważnie sprawdź, czy nowe nazwy plików dodane przez Ciebie nie powodują konfliktów ze starszymi plikami.

W Xcode 11.4, nawet jeśli przeniesiesz istniejący plik do innej grupy, sugestie znikną. Można to wyleczyć, po prostu ponownie uruchamiając Xcode.

Abhinav Dobhal
źródło
4

Po długim czasie poszukiwań w końcu rozwiązałem problem. W Xcode> Preferencje> Edycja tekstu, w polu „Ukończenie kodu”, z jakiegoś powodu zaznaczono opcję „Użyj klawisza Escape, aby wyświetlić sugestie uzupełniania”. Gdy tylko odznaczyłem to pole, automatyczne uzupełnianie działało jak urok, nawet bez konieczności ponownego uruchamiania Xcode! (Xcode 10)

Xcoder
źródło
3

Dodałem tutaj, co się dzieje w moim projekcie na wypadek, gdyby mogło to pomóc komuś innemu ... Miałem 2 pliki o tej samej nazwie i nie zdawałem sobie sprawy.

TomCobo
źródło
2

Właśnie straciłem dzień, próbując rozwiązać koszmar autouzupełniania Xcode (9.2). Usuwanie danych pochodnych wydawało się działać na krótko, po czym sytuacja się odwróciła. Ponowne uruchamianie itp. I inne sugerowane voodoo nie przyniosły różnicy.

Zrezygnowałem i pobrałem 30-dniową wersję próbną AppCode z Jet Brains. Autouzupełnianie działało tam dobrze i może to zbieg okoliczności, ale potem zaczęło działać ponownie w moim projekcie w Xcode. Nie mogę zagwarantować, że będzie nadal działać ...

SimonTheDiver
źródło
„inne sugerowane voodoo” lol - tak dobrze ujęte ... tracimy tyle czasu na szukanie rozwiązań dla błędów
Apple'a
2

W moim przypadku wydaje się to być specyficzne dla pliku (Xcode 9.2) Dla mnie poprawka była:

  1. Usuń plik powodujący problem (usuń odniesienie)
  2. Oczyść i zbuduj
  3. Dodaj plik z powrotem do projektu (nie sprawdzałem celów testowych)
  4. Zbuduj ponownie

Wreszcie po 3 godzinach próbowania wszystkiego - autouzupełnianie działa tak, jak powinno.

Matjan
źródło
2

Problemy głównie z powodu braku lokalizacji niektórych plików w nawigatorze projektów (błędy kompilacji)

  1. Naciśnij polecenie + 1, aby otworzyć Project Navigatorokienko
  2. Sprawdź, czy są jakieś brakujące pliki

Możesz też:

  1. Usuń DerivedData (polecenie + shift + K)
  2. Wyczyść folder kompilacji (polecenie + shift + opcja + K)
  3. Ponownie naciśnij build (polecenie + B)
  4. Powinieneś zobaczyć błąd kompilacji, że Xcode nie mógł znaleźć niektórych plików, które uniemożliwiają narzędziu kompilacji przetwarzanie autouzupełniania.
  5. Popraw i napraw wszystkie brakujące pliki, które widzisz.

Mam nadzieję że to pomoże

Vinh Nguyen
źródło
2

Xcode 11.3, macOS Catalina

proces parsecd osiąga 100% cpu, więc zabij to pomaga mi

Олень Безрогий
źródło
2

Dla Xcode 11.4 (11E146)

Back Slash w nazwie folderu przerywa działanie funkcji autouzupełniania. Jeśli tak jest, usuń go i zbuduj ponownie.

wprowadź opis obrazu tutaj

Husam
źródło
1

U mnie działo się to w moim pliku testowym, ponieważ z jakiegoś powodu nie był częścią celu. Ustawienie docelowego członkostwa rozwiązało problem.

Menno
źródło
1

U mnie problem wystąpił, gdy odrzuciłem wszystkie zmiany jednego pliku (w sekcji Kontrola źródła> Zatwierdź), co skutecznie usunęło plik. Właśnie tego chciałem i pomyślałem, że plik i wszystkie odniesienia do niego również zostaną usunięte.

Jednak nadal istniało odniesienie do pliku (zaznaczone na czerwono) w nawigatorze projektu. Usunięcie (teraz nieistniejącego) pliku w nawigatorze projektu w magiczny sposób przywróciło automatyczne uzupełnianie.

Nie pomogło żadne czyszczenie, usuwanie danych pochodnych itp. Zdałem sobie sprawę, że usunięty plik nadal się wyświetlał, kiedy próbowałem zbudować projekt, co oczywiście się nie udało, ponieważ nie mógł znaleźć tego pliku.

Mam nadzieję, że to pomoże komuś zaoszczędzić 30 minut :)

JohnV
źródło
Zobacz moją odpowiedź, dlaczego.
James Bush
@ponury, nie rozumiem ... Drugi akapit OP jest rozwiązaniem, prawda?
brasofilo
1

Użyj Command + B
lub, Command + R aby zbudować lub uruchomić projekt
Xcode czasami się psuje;)

Mehdi
źródło
1
  1. sprawdź, czy wybrałeś Suggest completions while typingw Xcode -> Preferencje -> Edycja tekstu
  2. przejdź do user-> Library-> Developer-> Xcode-> DerivedData w Finderze i usuń folder DerivedData
qingfeng
źródło
1

Moja sprawa może wydawać się zbyt szczegółowa, aby pomóc, ale może dać komuś pomysł, jak rozwiązać zepsuty autouzupełnianie. Xcode 10.2.1.

W moim przypadku autouzupełnianie całkowicie przestało działać i żadna z tych odpowiedzi nie pomogła. Ponadto słychać było, jak wentylator w komputerze zaczął głośniej pracować, co wskazuje na przepracowanie (żadne inne aplikacje nie działają), należy zauważyć, że edytuję na laptopie MacBook Pro. Wydawało się, że jest to powiązane z redaktorem, który stara się przeanalizować równanie, które napisałem:

switch mtype {
    case .indeterminate:
      newPosition.x = (frame.width - mainFigureText.frame.width) / 2
    case .right:
      newPosition.x = (((frame.width / 2) - mainFigureText.frame.width) / 2) + (frame.width / 2)
    case .left:
      newPosition.x = (((frame.width / 2) - mainFigureText.frame.width) / 2)
 }

Chciałem animować widok tekstu w lewo, w prawo lub do środka, w zależności od preferencji użytkownika. newPositionTo CGPoint, że tekst będzie animować do. W każdym razie podzieliłem równania i nagle automatyczne uzupełnianie zaczęło działać, a wentylator ucichł! Udało mi się odtworzyć ten konkretny problem więcej niż raz, ponownie wpisując powyższy kod, a następnie zastępując go:

let halfFrameWidth: CGFloat = frame.width / 2
let middleLeft = (halfFrameWidth - mainFigureText.frame.width) / 2

switch doseType {
    case .right:
      newPosition.x = middleLeft + halfFrameWidth
    case .left:
      newPosition.x = middleLeft
    default:
      newPosition.x = (frame.width - mainFigureText.frame.width) / 2
 }
Todd
źródło
1

Chciałbym dodać jeszcze jedno do stosu rozwiązań, ponieważ jako jedyne działało dla mnie i nigdzie go tu nie ma.

Xcode zwykle zawiera dwie domyślne konfiguracje kompilacji dla każdego projektu. Release& Debug. Mam dodatkowy do moich testów jednostkowych o nazwie Testing. W Xcode 10.1, 10.2, 10.3 i 11 beta nowy system kompilacji nie wydaje się go lubić i będzie automatycznie uzupełniany tylko wtedy, gdy użyjesz Releaselub Debug. Każda niestandardowa konfiguracja kompilacji przerywa automatyczne uzupełnianie w projekcie mieszanym (swift + objc) z testami jednostkowymi.

LimeRed
źródło
0

Ten link mi pomógł. Otwórz ustawienia kompilacji i wypełnij ścieżki wyszukiwania struktury. Zobacz poniższy obrazek.

wprowadź opis obrazu tutaj

Muruganandham K
źródło
0

Błędy kompilacji mogą spowodować uszkodzenie funkcji autouzupełniania w Xcode.

Adobels
źródło
0

Miałem problem ze 100% nie działającym autouzupełnianiem, żaden z napisanych tutaj nie pomógł. Zauważyłem jedną rzecz - został zerwany zaraz po dodaniu niektórych encji do pliku .xcdatamodel, które domyślnie mają definicję klasy codegen.

Nie byłem więc zaskoczony, gdy użycie starego stylu codegen none (i generowanie klas oczywiście) natychmiast rozwiązało problem, nawet bez ponownego uruchamiania xcode.

wprowadź opis obrazu tutaj

HotJard
źródło
0

W Xcode 11.1 samo wykonanie Clean Build Folderlub usunięcie danych pochodnych nie wystarczyło do naprawienia autouzupełniania.

Dopiero po ponownym uruchomieniu komputera Mac wszystko wróciło do normy

Ely
źródło
0

Jeśli masz problem z dziwnym uzupełnianiem / automatycznym uzupełnianiem / inteligencją (brak wyświetlania domyślnych rzeczy, takich jak delegaci i metody protokołów źródła danych), po prostu zmień swój cel (np. Z symulatora iPhone'a 8 na prawdziwe urządzenie), skompiluj projekt i wróć do pierwotnego celu .

Podobnie jest z problemami z Interface Builder (scenorysami), które nie wyświetlają niczego, a jedynie „nic nie zaznaczono” po wybraniu dowolnej części widoku. Po prostu przełącz się na inny Xib / Storyboard (lub nawet utwórz nowy), sprawdź, czy tam działa i przełącz się z powrotem.

Te obejścia zadziałały dla mnie w obu przypadkach (oba problemy wystąpiły w jednym dniu w jednym projekcie na Xcode 10.2.1). Z tego, co widziałem na forach internetowych, wydaje się, że są to błędy, które nie zostały naprawione od czasu Xcode 6.x.

Twoje zdrowie!

yrk
źródło
0

W moim przypadku (Xcode 11.1) stało się to, gdy zatrzymałem automatyczne indeksowanie Xcode za pomocą tego polecenia defaults write com.apple.dt.Xcode IDEIndexDisable -bool true.

Więc cofam to z defaults write com.apple.dt.Xcode IDEIndexDisable -bool false. następnie uruchom ponownie macOS i ponownie uruchom Xcode.

Reza Dehnavi
źródło
0

Miałem ten sam problem z Xcode 11.3. Nic powyżej nie pomogło, okazało się, że mam błędy kompilacji. Po prostu napraw błędy kompilacji, a autouzupełnianie znowu zadziała.

Aleksandra Nikolenko
źródło