Uaktualniłem do Xcode 6 beta 4, a teraz moja aplikacja ciągle zawiesza się z komunikatem
Nieznana klasa X w pliku konstruktora interfejsów.
Zawiesza się, ponieważ podobno Xcode nie może znaleźć moich niestandardowych klas, które połączyłem w mojej Storyboard, ale pokazuje, że są one poprawnie połączone w interfejsie Xcode.
Jestem pewien, że wszystko jest poprawnie połączone. Moją jedyną opcją może być usunięcie całego pliku scenorysu i rozpoczęcie od zera, ponieważ może on być w jakiś sposób uszkodzony.
Edycja: Chciałbym również dodać, że próbowałem wyczyścić, zresetować symulator, zadzierać z fazami kompilacji itp. Nic z tego nie działa.
ios
xcode
xcode6
interface-builder
uistoryboard
Epicki bajt
źródło
źródło
Odpowiedzi:
Rozwiązałem ten problem podczas pisania pytania. Pomyślałem, że odpowiem na moje pytanie i zostawię to tutaj wszystkim, którzy mogą napotkać ten problem podczas korzystania z Xcode 6 beta 4.
Aby rozwiązać ten problem, musisz wybrać każdy ze swoich niestandardowych obiektów klasy w Storyboard (obejmuje to wszelkie niestandardowe widoki, nawet same niestandardowe kontrolery widoków).
Następnie po zaznaczeniu tych obiektów otwórz inspektora tożsamości i pod „Klasą niestandardową” powinieneś zobaczyć opcję Moduł. Kliknij wewnątrz pola tekstowego Moduł i naciśnij klawisz Enter.
Otóż to! Bieżący moduł dla wszystkich moich obiektów niestandardowych musiał być wewnętrznie niepoprawnie ustawiony w Xcode 6 beta 4. Ale inspektor nie miał na to żadnych wizualnych wskazań.
Zauważ, że jeśli naciśnięcie Enter w polu tekstowym Moduł nie działa, spróbuj wybrać strzałkę po prawej stronie i ręcznie wybierz bieżący moduł, a następnie wyczyść pole tekstowe i naciśnij Enter. Możesz także spróbować nacisnąć klawisz Enter w polu tekstowym klasy (chociaż zwykle ma to na celu rozwiązanie innego problemu).
Oto obraz, aby wyjaśnić:
źródło
@objc(...)
do jednej z moich klas Swift.Czasami brakowało Xcode
customModule="AppName" customModuleProvider="target"
Aby to naprawić, otwórz scenorys jako kod źródłowy i zastąp ten wiersz:
do tego:
źródło
customModuleProvider
, a następnie błąd zniknął.customModuleProvider
zrobiłem to również dla mnie, dziękuję!Miałem ten problem po zmianie nazwy szybkiej klasy. Rozwiązano to za pomocą dyrektywy @objc:
źródło
@objc class X
i zmieniłem się do@objc(X) class X
pracy.@objc()
dyrektywa nie była potrzebna dla „oryginalnej” klasy ViewController ...Projektuj z wieloma celami
W moim przypadku pracuję nad Projektem z wieloma Celami, a problem polegał na tym, że „dziedziczenie z Celu” nie zostało zaznaczone. Wybranie opcji „dziedzicz od celu” rozwiązało mój problem
źródło
To działało dla mnie ..
Sprawdź skompilowane źródło, czy ten plik (np. ViewController.m) został dodany, czy nie, w moim przypadku plik ViewController nie został dodany, więc dawał mi błąd.
źródło
Compile Sources
. To naprawdę jest poprawne (i tylko) rozwiązanie dla niektórych.Może się to zdarzyć w dowolnym Xcode powyżej 6.0. Zdarzyło mi się to po zmianie nazwy niektórych klas ViewController w projekcie Swift (ale myślę, że stanie się tak również z Obj-C). Musisz tylko otworzyć konstruktora interfejsu, przejść do Inspektora tożsamości ViewController, którego nazwa została zmieniona, wybierz klasę i naciśnij Enter. Spowoduje to przypisanie zmienionej nazwy klasy do wybranego ViewController, a także zresetuje wartość modułu, która zostanie utracona po zmianie nazwy klasy.
Aktualizacja Xcode 8.1 (prawdopodobnie także 8.0):
Xcode 8.1 po prostu ulega awarii. Po prostu i irytująco po prostu ulega awarii i nic nie drukuje. Godziłem się za tą widmową katastrofą przez godzinę, aby dowiedzieć się, że to była ta sama rzecz - nieprzypisana klasa w IB. Jeśli występują awarie fantomowe, najpierw sprawdź IB pod kątem nieprzypisanych klas.
źródło
Czasami kontroler, który udostępniasz, traci członkostwo docelowe z bieżącej aplikacji. W takim przypadku naciśnięcie klawisza Enter w polu „Moduł” nic nie da. Przejdź do kontrolera i upewnij się, że docelowa liczba członków jest ustawiona na bieżącą aplikację.
źródło
Włączenie
Inherit Module From Target
zajęło właściwy moduł docelowy. To rozwiązało problem.źródło
Moja odpowiedź: ustaw niestandardowy moduł na niestandardową nazwę kapsuły (w moim przykładzie - niestandardowa nazwa klasy) jak na załączonym zrzucie ekranu
To rozwiązanie dotyczy konkretnego przypadku : niestandardowych klas widoków ze środowiska Pod (lub Kartaginy ).
Infrastruktura: XCode8, Swift3
źródło
Naprawiłem to, robiąc dokładnie odwrotność tego, co sugerował ChikabuZ (choć dziękuję za wskazanie tego). W pliku scenorysu znajdź to:
i zastąp to:
Nie mogę uwierzyć, ile godzin tracę na omijanie błędów w kompilatorze Swift i Xcode 6
źródło
Wybór właściwego
Module
dla mojegoCustom Class
rozwiązałem ten problem.Oto on:
źródło
Napotkałem ten problem w Xcode 8 , aby go rozwiązać, musiałem zmodyfikować scenorys w edytorze tekstu.
Zasadniczo poszukaj kontroli i usuń
customModule
icustomModuleProvider
z jednostki sterującej.Zrobił dla mnie lewę.
źródło
Miałem ten sam problem.
W moim przypadku Xcode nie dodał mojej klasy niestandardowej do: Cel> Faza kompilacji> Kompiluj źródła.
Dlatego polecam sprawdzenie, czy jest tam Twoja nazwa CustomClass.m.
Mam nadzieję, że to Ci pomoże.
źródło
Napotkałem ten problem w Xcode 6.1 po usunięciu
Main.storyboard
,LaunchScreen.xib
pliku i domyślnymViewController
klas z mojego projektu.Naprawiłem to, usuwając wpisy
Launch Screen File
iMain Interface
zInfo.plist
źródło
Sprawdź, czy Twoja klasa ma odpowiednie docelowe członkostwo .
źródło
Wszędzie szukałem tego w Google. Żadna z odpowiedzi nie działa dla mnie, dopóki nie poznałam 1 kolesia, który poprosił mnie o przeniesienie folderu projektu na pulpit. Po prostu działało automatycznie. Najwyraźniej jeśli masz projekt do folderu głęboko w wielu folderach, XCODE faktycznie się psuje.
źródło
Te kroki działają dla mnie.
1) Wyczyść dane pochodne.
2) Usuń pliki .h i .m
3) Ponownie utwórz pliki .h i .m
źródło
Rozwiązałem ten problem, otwierając plik scenorysu jako kod źródłowy i używając Command-F do wyszukiwania mojej nieznanej klasy i usuwania niestandardowej klasy z nią powiązanej.
źródło
To, co powiedział @gfrs, jest poprawne, musisz ustawić moduł. Jednak raz natknąłem się na problem, którego moja klasa nie była wymieniona w
Class
rozwijanej. W końcu usunąłem szybki plik, ponownie uruchomiłem Xcode i ponownie utworzyłem plik. Wreszcie klasa została wymieniona na liście i mogła być używana w Storyboard.Zobacz także tę odpowiedź , która wygląda jak rozwiązanie „prawdziwego” problemu, na jaki się natknąłem.
źródło
Rozwiązałem ten problem, wpisując nazwę modułu (niestety lista rozwijana nic nie pokaże ...) w klasie niestandardowej inspektora tożsamości dla wszystkich kontrolerów widoków i widoków.
Konieczne może być również wskazanie docelowego dostawcy. Aby osiągnąć ten cel, możesz otworzyć scenorys w trybie kodu źródłowego i dodać atrybut „customModuleProvider” zarówno w ViewController, jak i nawiasach kątowych View.
źródło
Moje rozwiązanie (Xcode 8.1 Swift 3.0):
Nieznana klasa xxx w pliku konstruktora interfejsów.
Otwórz StoryBoard jako kod źródłowy i wyszukaj xxx . Usuń atrybut zawierający wartość xxx . Kompiluj i uruchamiaj.
źródło
customModule="" customModuleProvider=""
W moim przypadku dodałem flagę
-ObjC
doOther Linker Flags
ustawień projektu, aby działała. Próbowałem też z-all_load
flagą i to też dobrze działało.źródło
W moim przypadku klasa wymieniona w Storyboard / xib nie miała ustawionego docelowego członkostwa .
Aby to naprawić, nadaj tej klasie
.h
i.m
plikom takie samo docelowe członkostwo, jak inne klasy.źródło
Moim rozwiązaniem było usunięcie @objc z definicji klasy niestandardowej.
źródło
Napotkałem problem, kiedy przeniosłem storyboard z projektu Swift do projektu Cel-c, zauważając odpowiedź vvkuznetsova , okazało się, że dwa projekty wykorzystują ten sam identyfikator. I „Produkt -> Wyczyść” i naciśnij Enter w polu tekstowym Moduł i Klasa. problem zniknął.
źródło
Naprawiłem to zgodnie z sugestią Laury, ale nie musiałem ponownie tworzyć plików.
Za pomocą XCode 4 w Nawigatorze projektu wybierz plik .m zawierający klasę, na którą skarży się
Idź do Widok-> Narzędzia-> Pokaż inspektora plików (pokaże to Inspektora plików po prawej stronie z tymi informacjami o pliku m)
Otwórz sekcję Docelowe członkostwo i upewnij się, że dla tego pliku .m wybrano cel
Kiedy dodałem mój plik .m do mojego projektu, z jakiegoś powodu nie dodałem go do mojego domyślnego celu, co spowodowało, że otrzymałem wspomniany błąd.
źródło
Moim problemem był błąd użytkownika. Miałem ogólny UIView w mojej serii ujęć, a w sekcji Klasa niestandardowa Inspektora tożsamości przypadkowo zmieniłem nazwę z UIView na bełkot.
Wystarczyło zmienić go z powrotem na UIView.
źródło
To, co zadziałało tylko dla mnie, to dodanie nazwy modułu do pliku xib ...
Tak, pliki Xib wyglądają tak:
HORRIBLE, moim zdaniem, rozwiązanie, ale podobno właśnie tak chce nas Apple.
To pytanie pokazuje 3 możliwe obejścia w wersji beta 4 ... najwyraźniej według niektórych Apple nie było bardzo pomocne w tej sytuacji, ponieważ nazywają to „działaniem zgodnie z przeznaczeniem”.
źródło
Miałem ten sam problem z Xcode w wersji 6.1 (6A1052d). Myślę, że problem pojawia się, jeśli zmienisz nazwę swojego projektu App / Xcode.
Moim rozwiązaniem było ręczne dodanie nazwy modułu w kreatorze interfejsów.
źródło
Miałem ten problem po dodaniu nowego celu, a następnie utworzeniu nowej klasy za pomocą okna dialogowego „Nowy plik”, ale przypadkowo nie sprawdziłem nowego celu, a także oryginalnego celu w oknie dialogowym tworzenia, więc obiekt został dodany tylko do mojego oryginalny cel. Rozwiązaniem było usunięcie plików źródłowych (tylko usunięcie odniesienia), a następnie dodanie ich z powrotem za pomocą „Dodaj pliki”, tym razem sprawdzając oba cele.
źródło