W mojej konsoli pojawia się następujący błąd:
Oczekuje się, że aplikacje będą miały kontroler widoku głównego pod koniec uruchamiania aplikacji
Poniżej moja application:didFinishLaunchWithOptions
metoda:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set Background Color/Pattern
self.window.backgroundColor = [UIColor blackColor];
self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
//self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];
// Set StatusBar Color
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
W interfejsie Konstruktora UITabBarController
delegat jest podłączony do delegata aplikacji.
Czy ktoś wie, jak rozwiązać ten problem?
ios
objective-c
ArtSabintsev
źródło
źródło
Odpowiedzi:
Miałem ten sam problem. Sprawdź swoją główną. M. Ostatni argument powinien być ustawiony na nazwę klasy, która implementuje protokół UIApplicationDelegate.
źródło
NSStringFromClass
. W ten sposób Xcode tworzy teraz plik main.m. Na przykład:#import "AppDelegate.h
a następnieint retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
self.window
jest zainicjowany jakself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Zamień w AppDelegate
do
źródło
addSubview
Linia była częścią szablonu projektu na wczesnej wersji Xcode / iOS SDK. Jeśli aplikacja ma długą historię, możesz ją mieć, nawet jeśli jej nie napisałeś.Miałem ten sam błąd podczas próby zmiany pierwszego kontrolera widoku, który został załadowany
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Na początku tak naprawdę nie wiedziałem, skąd dokładnie pochodzi błąd, więc zawęziłem go i dowiedziałem się, co poszło nie tak. Okazuje się, że próbowałem zmienić sposób wyświetlania widoku, zanim faktycznie pojawił się na ekranie. Rozwiązaniem było więc przeniesienie tego kodu do kontrolera widoków, który sprawiał mi problemy
- (void)viewDidLoad
do
- (void)viewDidAppear:(BOOL)animated
i błąd przestał się pojawiać. Mój problem był konkretnie spowodowany stworzeniem
UIAlertView
programu.W twoim przypadku sugeruję sprawdzenie kodu w aktywnym kontrolerze widoku tabBarController (ponieważ jest to prawdopodobnie problem w tym kontrolerze widoku). Jeśli to nie zadziała, spróbuj ustawić ustawienia początkowe w pliku stalówki zamiast w kodzie - lub jeśli chcesz to zrobić w kodzie, spróbuj przenieść kod do odpowiedniej metody aktywnej kontrolera widoku tabBarController.
Powodzenia!
źródło
viewDidLoad:
(bez dodania flagi) i nie powinienem tego robić. Niezależnie od tego, dziękuję za sugestię!viewDidLoad
do wielu rzeczy, konfiguruję wszystkie rzeczy po raz pierwszy, takie jak dodawanie danych doUITableView
. Nie mogę tego przenieść,viewDidAppear:
ponieważ chcę, żeby wystrzelił tylko raz.Dostałem to, kiedy zaczynałem od szablonu „Pusta aplikacja”, a następnie ręcznie dodawałem XIB. Rozwiązałem go, ustawiając główną nazwę stalówki zgodnie z sugestią Sunny. Brakującym krokiem w tym scenariuszu jest usunięcie
od
Ponieważ spowoduje to zastąpienie wystąpienia okna utworzonego w pliku Xib. Zakłada się, że utworzyłeś ViewController i podłączyłeś go wraz z oknem i Delegatem aplikacji również w pliku XIB.
źródło
To mi się przydarzyło. Rozwiązany przez edycję pliku .plist. Podaj podstawową nazwę pliku głównej końcówki. (Powinien to być MainWindow.xib). Mam nadzieję, że to pomoże.
źródło
Niedawno napotkałem ten sam problem podczas budowania projektu z ios5 sdk. Początkowo budował się i działał poprawnie, ale potem pojawił się błąd.
W moim przypadku rozwiązanie było dość proste.
Brakowało tego, że jakoś właściwość Interfejs główny na karcie podsumowania mojego celu aplikacji została usunięta. Więc musiałem to ustawić ponownie.
Jeśli nie o to chodzi, a tabBarController jest nadal zerowy, zawsze możesz programowo utworzyć kontroler okien i root. Jako rezerwowy dodałem następujący kod do mojego projektu
Będzie to działać tylko wtedy, gdy zaimplementowane zostanie również rozwiązanie sho.
źródło
Uaktualniłem do iOS9 i zacząłem uzyskiwać ten błąd znikąd. Byłem w stanie to naprawić, ale dodając poniższy kod do
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
źródło
Żadna z powyższych sugestii nie rozwiązała mojego problemu. Moje było to:
Dodaj:
po:
w mojej aplikacji
źródło
źródło
makeKeyAndVisible
go masz, to nie rozwiązuje problemu. TYLKO to rozwiązało dla mnie ostrzeżenie. DZIĘKUJĘ CI!Storyboard
równieżjak dodać RootViewController dla iOS5
jeśli twoja aplikacja do tej pory nie korzystała z RootViewController, po prostu utwórz go;), naciskając Plik> Nowy> Nowy plik; wybierz
UIViewController subclass
nazwij go RootViewController , odznacz With XIB dla interfejsu użytkownika (zakładając, że już go masz) i umieść ten kod w AppDelegate :: didFinishLaunchingWithOptionsna pewno - musisz zaimportować plik RootViewController.h i utworzyć zmienną
tutaj jest fajny artykuł o RootViewController i AppDelegate,
źródło
Miałem również ten błąd, ale w odróżnieniu od żadnej z wcześniej wymienionych odpowiedzi mój, ponieważ odkomentowałem metodę „loadView” w moim nowo wygenerowanym kontrolerze (xcode 4.2, ios5).
Powiedział mi nawet, że metoda służy do programowego tworzenia widoku, ale przeoczyłem go, ponieważ wyglądał tak podobnie jak inne metody, takie jak viewDidLoad, których normalnie używam, ale go nie złapałem.
Aby rozwiązać, po prostu usuń tę metodę, jeśli nie tworzysz programowo hierarchii widoków znanej również za pomocą stalówki lub scenorysu.
źródło
Też mam problemy. dostałem mój projekt w xcode4.2.1. Przeczytałem tam wszystkie komentarze, ale nikt nie jest dla mnie fajny. po chwili stwierdziłem, że skomentowałem kawałek kodu.
potem odkomentowałem to. wszystko jest dla mnie w porządku. mam nadzieję, że to by wam pomogło.
źródło
Upewnij się, że masz tę funkcję w delegacie aplikacji.
Upewnij się, że didFinishLaunchingWithOptions zwraca TAK. Usunięcie wiersza „return YES” spowoduje błąd. Ten błąd może występować szczególnie często u użytkowników scenariuszy.
źródło
W pierwszym widoku
MenuViewController
dodałem:w metodzie delegowania aplikacji:
To się udało.
źródło
Nastąpiła niewielka zmiana w stosunku do iOS 5.0 lub podobnej, wymagająca posiadania kontrolera widoku root. Jeśli Twój kod jest oparty na starszym przykładowym kodzie, takim jak GLES2Sample , wówczas w tych przykładach kodu nie został utworzony kontroler widoku głównego.
Aby to naprawić (na przykład ten GLES2Sample), od razu
applicationDidFinishLaunching
tworzę kontroler widoku głównego i dołączam do niego mój glView.To sprawia, że ostrzeżenie znika i tak naprawdę nie wpływa na twoją aplikację.
źródło
Spróbuj podłączyć IBOutlet kontrolera paska kart do widoku głównego w Konstruktorze interfejsów zamiast
Ale tak naprawdę nie widziałem wcześniej takiego błędu.
źródło
Rozwiązałem problem, wykonując następujące czynności (żadne z powyższych rozwiązań nie pomogło):
Z menu rozwijanego związanego z „Głównym interfejsem” wybierz inny wpis, a następnie ponownie wybierz „MainWindow”, a następnie przebuduj.
źródło
Natknąłem się na ten sam problem, ale używałem
storyboard
Przypisywanie mojego
storyboard
InitialViewController
do moich okienrootViewController
.W
i to rozwiązało problem.
źródło
Ten sam problem zacząłem zaraz po uaktualnieniu do Xcode 4.3 i tylko podczas uruchamiania projektu od zera (tj. Utwórz pusty projekt, następnie utwórz kontroler UIView, a następnie utwórz osobny plik stalówki).
Po wstawieniu WSZYSTKICH wierszy i upewnieniu się, że mam prawidłowe połączenia, otrzymywałem ten błąd, a plik nib, który próbowałem załadować przez kontroler widoku (który został ustawiony jako rootController) nigdy nie pokazywał się w symulatorze.
Utworzyłem pojedynczy szablon widoku za pomocą Xcode i porównałem go z moim kodem i NAPRAWDĘ znalazłem problem!
Xcode 4.3 wydaje się dodawać domyślnie metodę - (void) loadView; do sekcji implementacji kontrolera widoku. Po uważnym przeczytaniu zawartych w nim komentarzy stało się jasne, na czym polega problem. Komentarz wskazał, aby zastąpić metodę loadView, jeśli programowo tworzysz widok (a ja parafrazuję), w przeciwnym razie NIE zastępuj loadView, jeśli używasz stalówki. W tej metodzie nie było nic innego, więc w efekcie przesłoniłem metodę (i nic nie robiłem) PODCZAS używania pliku stalówki, co spowodowało błąd.
ROZWIĄZANIE polegało albo na całkowitym usunięciu metody loadView z sekcji implementacji, albo na wywołaniu metody nadrzędnej poprzez dodanie [super loadView].
Najlepiej byłoby usunąć go, jeśli użyjesz pliku NIB, ponieważ dodanie innego kodu spowoduje jego zastąpienie.
źródło
Miałem ten sam komunikat o błędzie w dzienniku. Miałem wyskakujące okienko UIAlertView w aplikacji: didFinishLaunchingWithOptions. Rozwiązałem to, opóźniając połączenie z alertView, aby dać czas kontrolerowi rootowania na zakończenie ładowania.
W aplikacji: didFinishLaunchingWithOptions:
który dzwoni po 1 sekundzie:
źródło
Miałem ten sam problem. Jeśli budujesz aplikację opartą na oknie „od zera” tak jak ja, musisz wykonać następujące czynności: (uwaga: są to kroki dla Xcode 4.2).
0. Upewnij się, że delegat aplikacji jest zgodny z protokołem UIApplicationDelegate.
Załóżmy na przykład, że nasz delegat nazywa się MyAppDelegate. W MyAppDelegate.h powinniśmy mieć coś takiego:
1. Określ delegata aplikacji w main.m
Na przykład,
2. Utwórz plik interfejsu głównego okna.
Aby to zrobić, kliknij projekt prawym przyciskiem myszy i wybierz Nowy plik. Następnie wybierz Okno z sekcji iOS -> Interfejs użytkownika.
Po dodaniu pliku do projektu przejdź do podsumowania projektu (kliknij lewym przyciskiem myszy na projekt; kliknij podsumowanie). W obszarze Informacje o wdrożeniu iPhone / iPod (i odpowiedniej sekcji iPada, jeśli chcesz) i wybierz nowy plik interfejsu w „ Główny interfejs ”.
3. Połącz wszystko w edytorze interfejsu
Wybierz plik interfejsu z listy plików, aby wyświetlić edytor interfejsu.
Upewnij się, że panel Narzędzia jest otwarty.
Dodaj nowy obiekt, przeciągając obiekt z listy Obiekty w panelu Narzędzia na przestrzeń powyżej obiektu Windows. Wybierz obiekt. Kliknij Inspektora tożsamości w panelu Narzędzia. Zmień klasę na delegata aplikacji (w tym przykładzie MyAppDelegate).
Wyświetl inspektora połączeń dla MyAppDelegate. Podłącz wylot okna do okna, które już istnieje w pliku interfejsu.
Kliknij właściciela pliku po lewej, a następnie kliknij Inspektora tożsamości w panelu Narzędzia. Zmień klasę na
UIApplication
Wyświetl inspektora połączeń dla właściciela pliku. Podłącz ujście delegata do obiektu MyAppDelegate.
4. Na koniec, co bardzo ważne, kliknij obiekt Window w pliku interfejsu. Otwórz Inspektora atrybutów. Upewnij się, że „Visible at Launch” jest zaznaczone.
To wszystko, co musiałem zrobić, aby działało dla mnie. Powodzenia!
źródło
Jeśli użyjesz MTStatusBarOverlay, otrzymasz ten błąd.
MTStatusBarOverlay tworzy dodatkowe okno (okna [[UIApplication sharedApplication]), które nie mają kontrolera głównego.
To nie wydaje się powodować problemu.
źródło
Otrzymałem ten sam błąd po zamianie mojego interfejsu użytkownika na Storyboard przy użyciu XCode 4.6.3 i iOS 6.1
Rozwiązano go, usuwając cały kod z didFinishLaucnhingWithOptions w AppDelegate
źródło
OrdoDei udzielił poprawnej i wartościowej odpowiedzi. Dodaję tę odpowiedź, aby podać przykład
didFinishLaunchingWithOptions
metody, która korzysta z jego odpowiedzi, a także uwzględnia komentarze innych osób dotyczące Nawigatora.źródło
Stało się tak, ponieważ przypadkowo skomentowałem:
od
źródło
Byłem w stanie ustawić początkowy kontroler widoku na ekranie podsumowania xcode.
Kliknij najwyższą nazwę projektu w Eksploratorze plików po lewej stronie (powinna mieć małą ikonę planu). W środkowej kolumnie kliknij nazwę swojego projektu pod „CELAMI” (obok powinna znajdować się ikona ołówka „A”). Przejrzyj „Informacje dotyczące wdrażania iPhone'a / iPoda” i „Główny interfejs”. Powinieneś być w stanie wybrać opcję z menu rozwijanego.
źródło
Oprócz odpowiedzi „sho”, która jest poprawna (czwarty parametr UIApplicationMain powinien być nazwą głównego kontrolera), dodaję kilka komentarzy.
Niedawno zmieniłem „model” mojej aplikacji z używania MainWindow.xib do programowania okna. Aplikacja korzystała ze starszego szablonu, który automatycznie utworzył MainWindow. Ponieważ chciałem obsługiwać inny widok kontrolera XIB dla iPhone'a 5, łatwiej jest programowo wybrać odpowiedni XIB, gdy tworzony jest Delegat aplikacji. Usunąłem również MainWindow.xib z projektu.
Problem polegał na tym, że zapomniałem wypełnić czwarty parametr w głównym UIApplication i ZAPOMNIAŁEM USUNĄĆ MainWindow z „Main Interface” w Podsumowaniu projektu.
Spowodowało to WIELKI problem: spowodowało nieszkodliwe ostrzeżenie „Oczekuje się, że aplikacje ...” na urządzeniach programistycznych, ale kiedy trafiło do App Store, zepsuło się na telefonach konsumenckich, powodując awarię, ponieważ MainWindow nie było już w pakiecie! Musiałem poprosić o przyspieszoną recenzję poprawki.
Innym objawem jest to, że czasami biały blok, jak pusty UIView, czasami pojawiał się, gdy Ustawienia były zmieniane, a aplikacja była umieszczana na pierwszym planie. W iPhonie 5 było jasne, że jest to blok 320 x 480. Być może brakujący MainWindow był tworzony w trybie programistycznym, przy użyciu starego rozmiaru. Właśnie znalazłem ten błąd, gdy pierwsze raporty o awarii dotarły do skrzynki odbiorczej.
Zainstalowanie aplikacji z App Store zamiast z XCode pokazało, że aplikacja rzeczywiście uległa awarii, a problem MainWindow ujawnił się w logu, więc mogłem zobaczyć, że nie była to specjalna kombinacja urządzeń + wersji IOS.
źródło
Aby dodać do odpowiedzi Mike'a Flynna, od aktualizacji do Xcode 7 i uruchomienia mojej aplikacji na urządzeniu z iOS 9, dodałem to do mojego
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
źródło
Ten problem występuje, gdy nie masz poprawnie skonfigurowanego Konstruktora interfejsów.
Upewnij się, że okno Delegata aplikacji i ujścia kontrolerów są podłączone:
W pliku MainWindow.xib przytrzymaj kontrolę, kliknij polecenie Deleguj aplikację i przeciągnij do obiektu Window. Wybierz okno. Przejmij kontrolę i ponownie wybierz delegata aplikacji, przeciągnij do głównego kontrolera widoku i wybierz viewController.
źródło
Ten błąd pojawia się również, gdy właściciel pliku MainWindow.xib jest nieprawidłowo ustawiony.
Właścicielem pliku jest UIApplication
-> wstawiony obiekt klasy delegowanej aplikacji z wylotem okna podłączonym do okna
źródło