Chociaż ten wątek jest stary, nie widziałem odpowiedzi opisującej, co zadziałało dla mnie, więc oto ...
Miałem ten błąd i wizualne badanie scenorysu pokazało, że wszystkie kontrolery widoku wydają się być połączone z głównym kontrolerem widoku.
Próbowałem nazwać wszystkie 17 kontrolerów widoku w scenorysie (jak w odpowiedzi @ bobnoble). Użyłem konwencji nazewnictwa opartej na długiej nazwie kontrolera widoku, np. „Jvc” dla „Jobs View Controller”. Kiedy próbowałem budować, otrzymałem komunikat o błędzie wskazujący, że jeden z kontrolerów widoku ma zduplikowaną nazwę. Śledząc rzeczy, odkryłem, że mam rzeczywisty duplikat kontrolera widoku ułożony dokładnie na swoim bliźniaku. Podejrzewam, że było to uszkodzenie typu „wytnij i wklej” z eksperymentu z interfejsem użytkownika, którego nie wycofałem całkowicie.
W każdym razie usunięcie niepołączonego bliźniaka rozwiązało mój problem. Następnie usunąłem wszystkie nazwy VC, ponieważ nie ma do nich odniesień w kodzie.
Storyboard ID
W swojej serii ujęć wybierz każdy z kontrolerów widoku (czerwona strzałka na obrazku poniżej) i spójrz na pole Identyfikator serii ujęć (czerwony owal). Żadne z pól identyfikatora scenorysu nie powinno być puste. Kiedy znajdziesz taki, to jest winowajcą.
źródło
Storyboard ID
usunęło ostrzeżenieUINavigationController
kilkaUIViewControllers
i musiałem ustawić dla nich identyfikator, nawet nigdy nie dzwoniłem do żadnego z nich po identyfikatorze. Naprawdę irytujące, szukanie błędu tam, gdzie nikogo nie ma!Właśnie miałem ten dokładny błąd z prostym scenariuszem z pojedynczą sceną i wszystko, co musiałem zrobić, aby to naprawić, to zaznaczyć pole wyboru „Jest początkowym kontrolerem widoku” dla kontrolera widoku 1 w serii ujęć. Podejrzewam, że Xcode domyślnie zaznaczał to pole w tej sytuacji, ale już tego nie robi.
Zaznacz pole dokładnie dla jednego z kontrolerów widoku w swoim storyboardzie i powinieneś być dobry.
źródło
Obawiam się, że będziesz musiał przejść przez wszystkie 30 z nich i sprawdzić, czy mają identyfikator Storyboard lub przejście do tego kontrolera widoku. Wymagany jest jeden z dwóch, oba są również opcją.
źródło
Ten problem może wystąpić w jednym z następujących scenariuszy:
Przypadek I: Jeśli żadna scena w serii ujęć nie jest oznaczona jako „isInitialViewController” .
Poprawka: Zidentyfikuj główny kontroler widoku i oznacz go jako „isInitialViewController” w SB. W takim przypadku identyfikator scenorysu nie jest obowiązkowy.
Przypadek II
Mogą wystąpić sytuacje, w których nie trzeba mieć initialViewController w scenorysie. Na przykład: podczas korzystania z wielu scenorysów.
Poprawka: w takich przypadkach upewnij się, że „identyfikator scenorysu” jest poprawnie podany i odwołujesz się do pierwszej sceny używanej w serii ujęć, używając tego identyfikatora. Na przykład:
UIStoryboard *myStoryBoard = [UIStoryboard storyboardWithName:@"MyStoryBoardName" bundle:nil]; MyViewController *myViewController = (MyViewController *)[myStoryBoard instantiateViewControllerWithIdentifier:@"MyViewControllerId"];
W tym przypadku „identyfikator scenorysu” jest obowiązkowy.
Przypadek III
Masz podłączony initialViewController. Ale nadal otrzymujesz to ostrzeżenie. Dzieje się tak, ponieważ niektóre sceny w storyboardzie mogą nie być połączone z „segue”, a także nie mają „identyfikatora scenorysu” . Zeskanuj swój scenorys, zobacz, czy potrzebny jest „ścieg” . Jeśli tego nie ma, podłącz segue. Jeśli płynnie nie jest potrzebne, upewnij się, że musisz podać „identyfikator scenorysu”, ponieważ jest to jedyny sposób na odwołanie się do sceny z kodu, jak pokazano w przykładowym kodzie powyżej.
Mam nadzieję że to pomoże
źródło
Nie musisz ustawiać
Storyboard ID
dla wszystkich scen lubUINavigationController
No cóż, mam około 50-60 scen i właśnie dostałem takie ostrzeżenie, żeby uświadomić sobie, że tylko kontroler (Scena) lub NavigationController, który nie jest połączony z segue, musi ustawić
Storyboard ID
.Widać, że na powyższym obrazku
UINavigationController
nie jest to związane z płynem, to był winowajca tego ostrzeżenia.Po prostu nadaj mu identyfikator Storyboard, aby usunąć to ostrzeżenie.
źródło
Miałem ten sam problem. Mam wiele widoków na mojej planszy z kontrolerem nawigacyjnym i paskiem kart. Dla mnie było to tylko ostrzeżenie, aby poinformować, że niektóre widoki nie są połączone. Upewnij się, że wszystkie widoki są w jakiś sposób połączone z głównym kontrolerem widoku . Zaczynałem ten projekt od zera, aby wyeliminować to ostrzeżenie i zauważyłem to samo ostrzeżenie, gdy widok nie był podłączony.
źródło
Najprostszy sposób na znalezienie obraźliwej sceny:
Przejdź do nawigatora problemów (w lewym panelu obok przycisku wyszukiwania) i dwukrotnie kliknij błąd. Pojawi się okno zawierające przestępczą scenę wyśrodkowaną na środku okna.
(W rzeczywistości jest to ogólnie prawdą - dwukrotne kliknięcie dowolnego błędu zwykle spowoduje wyświetlenie wyskakującego okienka zawierającego wyśrodkowany błąd - fajna mała sztuczka!)
Uwaga dodatkowa: czasami XCode nieprawidłowo poda ten błąd dla sceny, która jest głównym kontrolerem widoku kontrolera nawigacji (to jest początkowy kontroler widoku). Prosta poprawka polega na nadaniu temu kontrolerowi widoku głównego identyfikatora scenorysu, kompilacji (błąd powinien zniknąć), a następnie usunięciu storyboardID (już nie ma błędu).
źródło
Najłatwiejszym sposobem sprawdzenia, który kontroler lub scena powoduje ten problem, jest:
.storyboard
w Nawigatorze projektu i wybierającOpen As > Source Code
. Spowoduje to wyświetlenie podstawowego kodu XML Storyboardu.Teraz, w moim przypadku, ostrzeżenie było szczególnie irytujące, ponieważ „scena przestępcza” miała identyfikator i wyciek! Udało mi się rozwiązać problem, usuwając scenę, a następnie cofając usunięcie. Nie eleganckie, ale działało. Zapisałem mój Storyboard przed zrobieniem tego. Z perspektywy czasu powinienem był zrobić kopię i
diff
przed-po.źródło
Source Code
widok nie pokazuje błędu. Tak więc przebieg może się różnić.Dla mnie to nie było z powodu a
Storyboard ID
lub aSegue
. Otrzymałem to ostrzeżenie, ponieważ nie ustawiłemView Controller's Custom Class
.Wybierz
View Controller
naStoryboard
, a następnie wUtilities Pane
wybierzIdentity Inspector
ikonę. PoniżejCustom Class
zobacz, jaka wartość znajduje się wewnątrzClass
pola.Jeśli to tylko mówi
UIViewController
, musisz wpisać nazwę klasy. Będzie to nazwa Twojego pliku.h
i.m
plików, które tworzą niestandardowąUIViewController
podklasę.źródło
Doszedłem dziś do tego pytania. Używam Xcode 6.3, a odpowiedź na pytanie OP jest teraz dość prosta:
Wybierz kontroler widoku, który chcesz być pierwszym, pokaż Inspektor atrybutów i w sekcji Kontroler widoku upewnij się, że
Jest kontrolerem widoku początkowego
sprawdzone. Voilà!
źródło
Dzięki Xcode 7 można to łatwo obsłużyć. Nie ma potrzeby ręcznego przeglądania wszystkich scen, aby znaleźć problematyczną. Najpierw przejdź do nawigatora raportów , w którym można uzyskać szczegółowe informacje o znanych problemach. Opis problemu może wyglądać następująco:
Base.lproj / Main.storyboard: fPh-fe-F5F : ostrzeżenie: Scena jest nieosiągalna z powodu braku punktów wejścia i nie ma identyfikatora dostępu w czasie wykonywania za pośrednictwem -instantiateViewControllerWithIdentifier :.
Dzięki tym informacjom możesz skopiować identyfikator obiektu, w tym przypadku był to fPh-fe-F5F , i przeszukać obszar roboczy pod kątem wystąpienia tego ciągu. Ciąg zostanie znaleziony w pliku Main.storyboard. Kliknij dwukrotnie wynik wyszukiwania, a otworzy się Main.storyboard z wybraną sceną. Gdy znasz problematyczną scenę, możesz łatwo rozwiązać problem, ustawiając identyfikator scenorysu lub ustawiając opcję „Jest kontrolerem widoku początkowego”
źródło
Możesz po prostu ustawić identyfikator. W inspektorze atrybutów w prawym okienku znajdziesz pole o nazwie „Identyfikator”. Po prostu włóż tam dowolny ciąg, to powinno działać
Możesz kliknąć kontroler nawigacji i pod inspektorem atrybutów kliknąć przycisk „jest początkowym kontrolerem widoku”. To też powinno działać.
źródło
napotkałem ten sam problem i rozwiązałem go, umieszczając w identyfikatorze scenorysu dowolny identyfikator dla wszystkich kontrolerów viewController i NavigationController; błąd zostanie natychmiast usunięty
cieszyć się!!!
źródło
Może ten XQuery pomoże ci znaleźć te paskudne sceny
for $i in .//scene/objects/*[1][not(@storyboardIdentifier) or @storyboardIdentifier= '']/@id (: find every scene that has an empty storyboardIdentifier :) where count(.//segue[@destination= $i])= 0 and $i!= ./document/@initialViewController (: filter the results to the scenes that are not destinations of a segue and exclude the initialViewController :) return ($i, $i/../@customClass) (: return the storyboard-id and the customClass, if any :)
Jeśli masz zainstalowaną xqillę, możesz zapisać zapytanie do pliku i używać go tak, jak
xqilla <xqueryfile> -i <path to your storyboard>
źródło
Nie wiem, czy jeszcze o tym nie wspomniano, czy nie, ale innym powodem, dla którego możesz otrzymać to ostrzeżenie, jest to, że masz skręt idący w złym kierunku. Na przykład w moim projekcie otrzymałem to ostrzeżenie, ale wszystkie moje kontrolery były w rzeczywistości połączone. Jednak jeden z nich miał odcinek, który w zasadzie starał się przedstawić rodzica dziecku zamiast rodzica prezentującego dziecko. To spowodowało to samo ostrzeżenie.
źródło
Otrzymałem to ostrzeżenie, gdy mam UIViewController w Storyboard, do którego nic nie jest ustawione. Uniknąłem tego ostrzeżenia, ustawiając na to identyfikator Storyboard.
źródło
Miałem ten sam problem, ale zdałem sobie sprawę, że korzystałem z widoku kontenera i zamiast usuwać domyślny kontroler widoku, usunąłem jego płynność, więc kontroler widoku pozostał w scenorysie, podobnie jak ostrzeżenie. Jest to więc jeden z przypadków, w których pojawia się ostrzeżenie, jeśli domyślny kontroler widoku widoku kontenera nie jest poprawnie usuwany, gdy nie jest potrzebny.
źródło
Próbowałem wszystkiego, co opisano powyżej, bezskutecznie. Miałem wszystko poprawnie podłączone w IB, z dokładnie jednym
UIViewController
wyznaczonym jako główny kontroler widoku. Nie miałem żadnych identyfikatorów, ale dodałem je do wszystkich moich kontrolerów.Jedynym sposobem mogę dostać ostrzeżenie zniknie było robiąc wszystko powyżej (w tym restarcie komputera i czystym kompilacji) , a następnie przełączenie się na bezbłędną gałąź mojego projektu w git iz powrotem.
Nie jestem pewien, która czynność go naprawiła lub która kombinacja działań, ale nie była to czysta kompilacja. Może to być produkt uboczny Main.storyboard, który zawsze zmienia się po prostym otwarciu, co oznacza, że muszę
git commit -m "Stupid storyboard"
częściej niż chcę.źródło
Oto, co zadziałało dla mnie:
źródło
Otrzymałem ten sam błąd: w moim przypadku błąd polegał na tym, że nie zainicjowałem kontrolera widoku w moim storyboardzie.
Naprawienie tego spowodowało usunięcie tego ostrzeżenia.
źródło
Po prostu nadanie wszystkim MVC identyfikatora scenorysu zadziałało dla mnie.
źródło