Niedawno zaktualizowałem do Xcode 8 i mam problemy z Storyboard.
Jeśli otworzę projekt i nie mam otwartego Storyboardu, skompiluje się i będzie działał dobrze. Po otwarciu Storyboard otrzymuję wiele błędów dotyczących IB Designables, jak pokazano poniżej.
Te widoki są jedynymi widokami, które używają niestandardowych widoków z TextFieldEffects
i BEMCheckbox
które zaimportowałem za pomocą Cocoapods.
ios
xcode8
xcode-storyboard
Alan
źródło
źródło
Odpowiedzi:
Aby znaleźć przyczynę, możesz wypróbować jedną z następujących czynności:
IBDesignablesAgentCocoaTouch
dzienników w tym katalogu:~/Library/Logs/DiagnosticReports
i zobacz przyczynę.Idź do Edytor -> Debuguj wybrany widok, wybierając
@IBDesignable UIView
swój scenorys i zobacz ślad stosu.Usuń folder danych pochodnych.
Wyczyść swój projekt
Shift
+Command
+Alt
+K
.Zbuduj swój projekt
Command
+B
.źródło
Fatal error: Use of unimplemented initializer 'init(frame:)' for class 'TestIBKit.Button'
. Nie wiedziałem, żeIBDesignablesAgentCocoaTouch
proces wywołujeinit(frame:)
zamiastinit?(coder aDecoder:)
.init(frame:)
w mojej podklasie UIButtonRozwiązałem problem, wykonując następujące czynności:
File > Workspace settings
.DerivedData
folderu.DerivedData
folderu i usuń folder odpowiadający Twojemu projektowi.Editor > Refresh all views
.Zaktualizowano
Czasami po prostu idź bezpośrednio do
Editor > Refresh all views
pracy. JeśliRefresh all views
jest wyłączona, zamknij Xcode i spróbuj ponownie.źródło
Po prostu usuwam widok, który się nie powiódł i naciskam polecenie + Z, aby cofnąć usunięcie. Mi to pasuje.
Jeśli późniejsza edycja nieudanego widoku może się powtórzyć, powtórz powyższe czynności.
źródło
Z tym problemem spotkałem się w CocoaPod 1.5.0. Rozwiązaniem jest ponowne zainstalowanie poda (ponowna instalacja poda) po wyświetleniu tego błędu lub zamiast tego możesz użyć CocoaPod 1.4.0. Działa dobrze w 1.4.0 (przynajmniej dla mnie).
aktualizacja:
Dodaj następujący skrypt w Podfile, aby pomóc mi rozwiązać problem w wersji 1.5.0
odniesienie: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911
źródło
s work for me, you should add
end` trwać kodu.Dodanie następującego kodu do mojej
@IBDesignable
klasy załatwiło sprawę.źródło
UITextView
. (1)init(frame: CGRect, textContainer: NSTextContainer?)
, (2)init?(coder aDecoder: NSCoder)
. Następnie odbuduj i ostrzeżenie (błąd) zniknie. Nie ma nawet potrzeby czyszczenia folderu kompilacji.Dla każdego - takiego jak ja - który nie może znaleźć tego
IBDesignablesAgentCocoaTouch
pliku lub podczas próby „Debugowania wybranych widoków” w Edytorze pojawia się błąd, oto inny sposób debugowania tych błędów „Nie udało się wyrenderować”.Otwórz aplikację „Konsola”, na pasku bocznym wybierz swój obecny komputer Mac (prawdopodobnie zostanie on domyślnie wybrany automatycznie), a następnie w pasku wyszukiwania wyszukaj „IBSceneUpdate” i naciśnij Enter.
W ten sposób za każdym razem, gdy pojawi się błąd Xcode dotyczący
IBDesignable
niemożności renderowania, otrzymasz również nowy wpis „IBSceneUpdate” zawierający więcej szczegółów o błędzie.Tak przynajmniej mogłem debugować swoje
IBDesignable
błędy!źródło
Jeśli używasz pliku xib dla niestandardowego widoku uiview. Spróbuj tego:
Zmień z
Do:
źródło
Spróbuj wyłączyć opcję `` Użyj odmian cech '' (panel Tożsamość i typ) dla dowolnego pliku xib, który możesz mieć dla niestandardowych widoków, które są używane w Twojej scenorysie.
źródło
mój problem został rozwiązany poprzez usunięcie folderów (związanych z tym projektem) z folderu danych pochodnych. możesz to zrobić, klikając Plik -> Ustawienia projektu -> następnie kliknij strzałkę na znak deside /Users/.../Xcode/DerivedData kliknij folder DerivedData, zobaczysz folder nazwany projektu i usuń je. zamknij xcode otwórz swój projekt, wyczyść projekt, wykonując ten krok Produkt-> wyczyść, a następnie skompiluj projekt: Produkt-> Kompilacja Rozwiązuje ten problem.
źródło
Prawidłowa odpowiedź od @Maria :
Alternatywny sposób :
Spotlight
console.app
Crash reports
IBDesignablesAgent-iOS
i przejrzyj dziennik awariiźródło
Po prostu otwórz swój scenorys -> Edytor -> Odśwież wszystkie widoki. Ta praca dla mnie.
źródło
Próbowałem wyczyścić i uruchomić projekt nie rozwiąże tego problemu.
Ale Zamknij i ponownie otworzył projekt.
źródło
Kiedy to debugowałem, odkryłem, że istnieje kilka klas, które modyfikują interfejs użytkownika. Zwykle marquelabel, która jest podklasą UILabel lub dowolnej innej klasy, która tworzy podklasę UIView i rysuje interfejs użytkownika w czasie wykonywania i koliduje z silnikiem Autolayout. Spróbuj podać stałą szerokość lub wysokość dla tych niestandardowych widoków. Jeśli to nie rozwiąże problemu, wypróbuj następujące rozwiązania: -
Rozwiązanie 1: - Usuń komentarz #use_frameworks z pliku pod.
Rozwiązanie 2: - Spróbuj usunąć dane pochodne
źródło
Miałem ten sam problem i przyjechałem tutaj, aby spróbować dowiedzieć się, co się stało. Zauważyłem najwyżej ocenioną odpowiedź, a sama odpowiedź mi nie pomogła, ponieważ IBDesignable nie istniał w folderze dziennika i wypróbowałem już tam wszystkie inne opcje, jednak w komentarzach zauważyłem, że ktoś mówi o inicjalizacji ramki.
Zdecydowałem się skomentować moje rozszerzenie IBDesignable dla UIView i natychmiast rozwiązało to problem. Aby to naprawić, znajdź rozszerzenie powodujące problem i upewnij się, że skonfigurowałeś wymagane inity, tworząc klasę IBDesignable i dostarczając wymagane inicjatory w następujący sposób:
WAŻNE: pamiętaj, aby dodać nową klasę do przedmiotu, na którym używasz projektu.
źródło
Napotkano ten sam błąd: po dostosowaniu UITextField i użyciu konstruktora interfejsu błąd w konsoli to -Użycie niezaimplementowanego inicjatora „init (ramka :)” dla klasy „CustomField”
Dodano inicjator, aby naprawić błąd
źródło
Napotkałem ten problem po aktualizacji do najnowszej wersji XCode.Po wypróbowaniu wielu rozwiązań opisanych powyżej, tylko całkiem Xcode, a następnie zamknąłem system i go włączyłem i to zadziałało.
źródło
Po wprowadzeniu niezbędnych zmian zmień scenorys lub w moim przypadku plik .xib, aby otworzyć w „XCode 7”, zapisz i zamknij. Jest to tylko środek zapobiegający błędom, ale ostatecznie będziesz musiał je naprawić lub robić to, dopóki nie będziesz w stanie.
źródło
W moim przypadku korzystałem z biblioteki, która była podklasą
UIView
. UżywałIB_DESIGNABLE
i brakowało połączenia[super awakeFromNib]
. Po dodaniu wywołania do tej metody błąd zniknął.Nie jestem pewien, czy
IB_DESIGNABLE
miał na to wpływ fakt, że był wdrażany .źródło
To dla mnie najłatwiejszy sposób: dodaj ten skrypt do swojego
Podfile
Podfile:
Źródło:
To obejście dla @IBDesignable można znaleźć tutaj: https://github.com/CocoaPods/CocoaPods/issues/5334
źródło