Nie można wstawić nowego połączenia gniazda: Nie można znaleźć żadnych informacji dla nazwanej klasy


281

Wystąpił błąd na Xcode, mówiąc, że nie ma informacji o kontrolerze widoku.

Nie można wstawić nowego połączenia gniazda: Nie można znaleźć żadnych informacji dla nazwanej klasy

Dlaczego to się dzieje?

Zrzut ekranu 1


2
Myślę, że wcześniej o to pytano: stackoverflow.com/questions/17735182/...
Tapani

Po prostu zamknąłem Xcode, a następnie otworzyłem go ponownie. kompilator ponownie załaduje wszystkie pliki i może wykryć plik, którego szukasz
Jane Chicken

Sprawdź, czy w pliku kontrolera widoku nie ma jeszcze odłączonego gniazdka. Odkryłem, że tak. Po usunięciu nie miałem problemów.
Kex,

Dla mnie żadne z powyższych rozwiązań nie działało. Musiałem usunąć kontroler widoku, który skopiowałem i wkleiłem ponownie w mojej serii ujęć, aby go ponownie użyć. Następnie przeciągnąłem nowy kontroler widoku w serii ujęć i wszystko poszło dobrze :). Mam nadzieję, że może pomóc komuś z tym samym problemem.
Arslan Saleem

To jest BŁĄD w XCode i nie wiem, dlaczego go nie naprawiają. Musisz zamknąć XCode i ponownie otworzyć. Gdy spróbujesz ponownie umieścić gniazda, ale tym razem zostaw kilka ENTERS przed zrobieniem tego. Nie musisz niczego usuwać ani marnować czasu na inne opcje ... To rozwiąże twoje problemy.
mavesonzini

Odpowiedzi:


692

Oto kilka rzeczy, które mogą to naprawić (w kolejności rosnącej trudności):

  • Wyczyść projekt ( Produkt> Wyczyść )
  • Ręcznie wklej

    @IBOutlet weak var viewName: UIView!
    // or
    @IBAction func viewTapped(_ sender: Any) { }

    i kontroluj przeciąganie do niego. (Zmiany typu, ile potrzeba.) Zobacz również ten .

  • Całkowicie zamknij Xcode i uruchom ponownie projekt.

  • Usuń folder danych pochodnych (przejdź do Xcode> Preferencje > Lokalizacje i kliknij szarą strzałkę obok folderu Dane pochodne. Następnie usuń folder projektu).
  • Kliknij usuń klasę, usuń referencję (nie Przenieś do Kosza) i dodaj ją ponownie. (zobacz tę odpowiedź )

nie zapomnij usunąć klasy z kontrolera widoku, aby te kroki działały
reggie

8
Żaden z tych kroków nie działał dla mnie w Xcode 8.3.2. Musiałem „Pokaż inspektora tożsamości”> wyczyścić pole „Klasa” (zaznaczyć nazwę klasy niestandardowej i usunąć)> ponownie wprowadzić nazwę klasy w polu „Klasa”. Xcode automatycznie uzupełnił nazwę klasy. Następnie nacisnąłem Enter.
PeqNP

Dodaj wiersz alias purgederiveddata='rm -rf ~/Library/Developer/Xcode/DerivedData/*'do ~ / .bashrc, aby użyć polecenia purgederiveddatado wyczyszczenia jednym poleceniem
eskimwier

Znalazłem inny sposób na rozwiązanie tego problemu. Przydarzyło mi się to, gdy zmieniłem niektóre ustawienia kompilacji, aby poprawić szybkość kompilacji. stackoverflow.com/a/50555888/2952876
Mathias Van Houtte

Gorąco zachęcam was wszystkich do wypróbowania poniższego rozwiązania. Byłoby wypatroszone, aby wiedzieć, że ludzie muszą ponownie uruchamiać swoje komputery, aby często pojawiał się błąd.
Stephen Paul

134

Lub jeśli żadna z powyższych nie działa, najpierw wpisz nazwę ujścia do pliku, @IBOutlet weak var headerHeightConstraint: NSLayoutConstraint!a następnie kliknij i przeciągnij od ujścia w stalówce do zmiennej, którą właśnie utworzyłeś programowo. Powinno działać bez żadnych problemów z czyszczeniem, budowaniem i usuwaniem czegokolwiek.


4
często szybsze rozwiązanie zamiast spędzać wiek na czyszczeniu, budowaniu itp. dzięki.
mohonish

1
Bardzo fajnie, a kiedy to zrobisz, zacznie się wyświetlać Automatic, dzięki.
AmJa

1
Najpierw podłącz swój obiekt XIB do IBoutletów, a następnie spróbuj połączyć ich ograniczenia IBOutletów. bez tego zawsze będzie wyświetlać błąd.
Chandramani,

Może to również mieć znaczenie, gdy spróbujesz włożyć nowy wylot. Na górze listy (gdzie powyżej jest wolne miejsce) zadziałało; środek listy nie.
Richard

1
To powinno być oznaczone jako najlepsza odpowiedź. To jest łatwiejsze, szybsze i bardziej niezawodne. Działa to również cały czas! Dobra robota i dzięki @StephenPaul
denis_lor

51

Wykonaj dwa następujące kroki, aby pozbyć się tego błędu

  1. Wyczyść projekt za pomocą opcji Produkt> wyczyść
  2. Uruchom projekt

Teraz spróbuj dodać akcję lub ujście. Otóż ​​to.

Happy Coding


4
Dziwne ... te dwa proste kroki pomogły mi również rozwiązać problem. Polecam więc najpierw spróbować tych łatwych kroków :-)
crosscode

49

Żadna ze wskazówek w najlepszej odpowiedzi nie działała dla mnie. Oszalałam. Potem zauważyłem, że Asystent Editor w jakiś sposób ustawił się na Ręczny i byłem na ViewController.swift (Interfejs) zamiast pliku ViewController.swift.

Zmieniłem to i problem rozwiązany. Trochę zawstydzające, ale hej, wszyscy się uczymy.

wprowadź opis zdjęcia tutaj


1
Odpowiedź oszczędzania życia! Żadna z pozostałych odpowiedzi nie rozwiązała tego raz na zawsze. Szkoda, że ​​opis błędu nie daje najmniejszej wskazówki, że możesz znajdować się w pliku worng. Dzięki. +1 za zdjęcie to wszystko wyjaśniło.
Pauloco

Zauważyłem coś całkiem podobnego, ale innego: w ścieżce u góry, gdzie wyświetlana jest nazwa klasy, była tylko nazwa klasy, ale brakowało początku ścieżki jako myProject> appName> kontroler, a następnie klasa. Wybrałem inną klasę, a potem z powrotem do problematycznej i wszystko w porządku
claude31,

15

Oto kroki dla mnie rozwiązane:

  1. Usuń odwołanie do nazwy klasy z View (storyboard / xib) i zapisz;
  2. Dodaj ponownie nazwę klasy i zapisz;
  3. Oczyść i zbuduj;

Gotowe !


10

Miałem ten sam problem. Miałem dość rozwiązań, ale nie działałem:

  1. Clean Project (cmd + shift + k) i nawet Clean Project Build (cmd + shift + alt + k)
  2. Deleted Derived data i Module Cache content

Poniżej obejście tego problemu:

  1. Przenieś do pliku kodu źródłowego i napisz IBOutlet / IBActionręcznie (preferowana kopia wklej)

Zrzut ekranu 1

  1. Następnie przejdź do pliku Storyboard i otwórz Utilitesokno
  2. Iść do Connection Inspector
  3. Następnie połącz IBOutleti IBActionzapisany w pliku źródłowym za pomocą Konstruktora interfejsów.

Zrzut ekranu 2


Przeciąganie gniazdek / akcji w ogóle nie działało, ale po tym, jak zrobiłem to ręcznie, wszystko znowu działało poprawnie.
Jason

Jest to standardowa alternatywna metoda wykonywania połączeń. W przypadku akcji przycisku radiowego jedynym sposobem jest AFAIK. W serii ujęć możesz również kliknąć kontroler prawym przyciskiem myszy, znaleźć funkcję i nawiązać połączenie.
Curt

8

Miałem ten sam problem. Uświadomiłem sobie, że w X-Code Manualzostał wybrany element, gdy próbowałem utworzyć ujście za pomocą przeciągania z wciśniętym klawiszem Control

wprowadź opis zdjęcia tutaj

Po ustawieniu na automatyczne działało

wprowadź opis zdjęcia tutaj


Miałem dokładnie ten problem. Nawet nie zauważyłem różnicy.
Joshua Dance

Wspaniały!!! Straciłem tyle czasu na ten projekt usuwania błędów, restartowania kodu xCode, usuwania danych pochodnych, ale to było dla mnie tylko rozwiązanie! Wielkie dzięki!
Anton Eregin

7

Rozwiązałem ten problem, programowo tworząc Etykiety i Pola Tekstowe, a następnie Przeciągnąłem klawiszem Command z małych pustych kółek po lewej stronie kodu do składników na Storyboard. Aby zilustrować mój punkt: napisałem @IBOutlet weak var HelloLabel: UILabel!, a następnie nacisnąłem Command i przeciągnąłem kod do komponentu na serii ujęć.


To rozwiązanie działało dla mnie idealnie! Oprócz tego @IBOutlet weak var myButton: UIButtonużyłem tego samego procesu, aby skonfigurować, @IBAction func doSomething(_ sender: Any) { }a następnie podłączyłem tę funkcję do UIButton na mojej serii ujęć. Dziękujemy za udostępnienie tego @KuboAndTwoStrings
Nii Mantse

6
  1. Zamknij projekt, nad którym pracujesz.
  2. Usuń folder projektu 【DerivedData】. (Ten folder może
    ~/Library/Developer/Xcode/DerivedData/
    znajdować się w folderze twojego projektu, w (twoim projekcie) /) lub w innym miejscu, które sam skonfigurowałeś.
  3. uruchom ponownie swój projekt.

4

Znalazłem łatwiejsze obejście, ponieważ ten błąd można znaleźć w XCODE 9.

Krok pierwszy przejdź do kontrolera widoku i ręcznie napisz właściwość, z którą chcesz się połączyć, jak w poniższym przykładzie, upewnij się, że używasz poniższego formatu.

@IBOutlet słaby var pytaniaStackView: UIStackView!

Krok drugi przejdź do scenorysu i połącz widok lub cokolwiek, co próbujesz połączyć z usługą utworzoną w kroku 1.

Powyższe pozwoli Ci zaoszczędzić czas na usuwanie i czyszczenie danych pochodnych.


3

Mam ten błąd, kiedy przemianowałem klasę. Następnie rozwiązałem go, wykonując poniższe kroki

  • W menu Xcode -> Product->Clean
  • Restart Xcode

to było jedyne rozwiązanie, które zadziałało dla mnie dość zabawnie.
Joseph Astrahan

2

W moim przypadku było to bc Wybrałem nowy plik UIViewController w IB, a następnie próbowałem przeciągnąć ctrl do tego nowego kontrolera bez uprzedniego usunięcia poprzednich połączeń w Inspektorze połączeń. Usuń je najpierw i spróbuj ponownie.


2

Dla mnie zadziałało, gdy na prawej karcie> Lokalizacja zaznaczyłem pole wyboru w języku angielskim. Początkowo sprawdzono tylko bazę. Po tym nie miałem już żadnych problemów. Mam nadzieję że to pomoże!


2

wprowadź opis zdjęcia tutaj

Wybrałem opcję Automatyczną , aby wybrać plik ViewController.swift. A potem mogę wziąć sklepy.


2

Wykonaj następujące dwa kroki tylko, aby pozbyć się tego błędu.

1.  Clean Project using Product -> clean.
2.  Run the Project.

Teraz spróbuj dodać / Połącz działania lub gniazdka.

Działa mi dobrze wiele razy.


1

Stało się tak, gdy dodałem Swiftplik do Objective-Cprojektu.
Więc w tej sytuacji możesz zrobić. .

  • Select MY_FILE.Swift >> Delete >> Remove Reference
  • Select MY_FOLDER >> Add MY_FILE.Swift
  • Voila ! You are good to go .

Gotowi na to! Próbowałem rozwiązać ten problem sam od pół godziny już lol. Problemy takie jak w Storyboardach można jednak łatwo naprawić. Dzięki! To mi bardzo pomogło!
Glenn

0

Najprostsze rozwiązanie: - Użyłem xCode 7 i iOS 9.

w twoim .m

usuń #import „VC.h”

zapisz .m i połącz ponownie swój punkt sprzedaży, działa dobrze.


0

Użyłem xCode 7 i iOS 9.

w twoim .m

usunąć #import "VC.h"

zapisz .m i połącz ponownie swój punkt sprzedaży, działa dobrze.

w twoim .m

Dodaj #import "VC.h"

zapisz .m


0

Nic z tego nie działało, ale wymyśliłem to.

Wewnątrz scenorysu skopiowałem odpowiedni ViewController do schowka i usunąłem go, a następnie wkleiłem go ponownie.

Nagle wszystko znów działało jak urok!

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.