In meiner Konsole wird der folgende Fehler angezeigt:
Es wird erwartet, dass Anwendungen am Ende des Anwendungsstarts einen Root-View-Controller haben
Unten ist meine application:didFinishLaunchWithOptions
Methode:
- (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;
}
In Interface Builder ist der UITabBarController
Delegat des Benutzers mit dem App-Delegaten verbunden.
Weiß jemand, wie man dieses Problem behebt?
ios
objective-c
ArtSabintsev
quelle
quelle
Antworten:
Ich hatte das gleiche Problem. Überprüfen Sie Ihre Hauptleitung. Das letzte Argument sollte auf den Namen der Klasse gesetzt werden, die das UIApplicationDelegate-Protokoll implementiert.
quelle
NSStringFromClass
. So erstellt Xcode jetzt die Datei main.m. Zum Beispiel:#import "AppDelegate.h
und dannint retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
self.window
es wie folgt initialisiert istself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
In AppDelegate ersetzen
zu
quelle
addSubview
Zeile war Teil der Projektvorlage einer frühen Version von Xcode / iOS SDK. Wenn die App einen langen Weg zurücklegt, haben Sie sie möglicherweise auch dann, wenn Sie sie nicht geschrieben haben.Ich hatte den gleichen Fehler beim Versuch, den ersten geladenen View Controller zu ändern
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Zuerst wusste ich nicht genau, woher der Fehler kam, also habe ich ihn eingegrenzt und herausgefunden, was schief gelaufen ist. Es stellt sich heraus, dass ich versucht habe, die Anzeige einer Ansicht zu ändern, bevor sie tatsächlich auf dem Bildschirm angezeigt wurde. Die Lösung bestand daher darin, diesen Code in den Viewcontroller zu verschieben, von dem ich Probleme hatte
- (void)viewDidLoad
zu
- (void)viewDidAppear:(BOOL)animated
und der Fehler wurde nicht mehr angezeigt. Mein Problem wurde speziell durch eine
UIAlertView
Show verursacht.In Ihrem Fall schlage ich vor, dass Sie den Code im aktiven Ansichts-Controller des tabBarController auschecken (da dies wahrscheinlich ein Problem in diesem Ansichts-Controller ist). Wenn dies nicht funktioniert, versuchen Sie, die Starteinstellungen in der NIB-Datei anstatt im Code festzulegen. Wenn Sie dies im Code tun möchten, verschieben Sie den Code in die entsprechende Methode des aktiven Viewcontrollers von tabBarController.
Viel Glück!
quelle
viewDidLoad:
(ohne ein Flag hinzuzufügen), und ich sollte dies auch nicht tun müssen. Trotzdem danke für den Vorschlag!viewDidLoad
für viele Dinge und richte alle erstmaligen Dinge ein, wie zum Beispiel das Hinzufügen von Daten zumUITableView
. Ich kann es nicht verschieben,viewDidAppear:
weil ich möchte, dass es nur einmal ausgelöst wird.Ich habe dies erhalten, als ich mit der Vorlage "Leere Anwendung" begonnen und dann manuell eine XIB hinzugefügt habe. Ich habe es gelöst, indem ich den Hauptnamen der Feder festgelegt habe, wie von Sunny vorgeschlagen. Der fehlende Schritt in diesem Szenario ist das Entfernen
von
Da wird die in der Xib-Datei erstellte Instanz Ihres Fensters überschrieben. Dies setzt voraus, dass Sie einen ViewController erstellt und ihn mit Ihrem Fenster und App Delegate in der XIB-Datei verbunden haben.
quelle
Das ist mir passiert. Gelöst durch Bearbeiten der .plist-Datei. Geben Sie den Basisnamen der Haupt-NIB-Datei an (sollte MainWindow.xib sein). Hoffe das wird helfen.
quelle
Ich habe kürzlich das gleiche Problem beim Erstellen eines Projekts mit ios5 sdk. Zuerst wurde es richtig gebaut und lief, aber danach trat der Fehler auf.
In meinem Fall war die Lösung ziemlich einfach.
Was fehlte, war, dass irgendwie die Eigenschaft Hauptschnittstelle auf der Registerkarte Zusammenfassung meines Anwendungsziels gelöscht wurde. Also musste ich es erneut einstellen.
Wenn dies nicht der Punkt ist und der tabBarController immer noch Null ist, können Sie Ihr Fenster und Ihren Root-Controller jederzeit programmgesteuert erstellen. Als Fallback habe ich meinem Projekt den folgenden Code hinzugefügt
Dies funktioniert nur, wenn die Lösung von sho ebenfalls implementiert ist.
quelle
Ich habe ein Upgrade auf iOS9 durchgeführt und diesen Fehler aus dem Nichts behoben. Ich konnte es beheben, aber den folgenden Code hinzufügen
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
quelle
Keiner der oben genannten Vorschläge löste mein Problem. Meins war das:
Hinzufügen:
nach:
in meinem Appdelegate
quelle
quelle
makeKeyAndVisible
, wird das Problem nicht behoben. NUR dadurch wurde die Warnung für mich gelöst. VIELEN DANK!Storyboard
auchSo fügen Sie einen RootViewController für iOS5 hinzu
Wenn Ihre App bisher keinen RootViewController verwendet hat, erstellen Sie einfach einen;), indem Sie auf Datei> Neu> Neue Datei klicken. Wählen Sie
UIViewController subclass
Name es RootViewController , deaktivieren Sie das mit XIB für Benutzeroberfläche (vorausgesetzt , Sie bereits eine haben) und setzen diesen Code in Ihre AppDelegate :: didFinishLaunchingWithOptionssicher - Sie müssen RootViewController.h importieren und die Variable erstellen
Hier ist ein schöner Artikel über den RootViewController und das AppDelegate.
quelle
Ich hatte auch diesen Fehler, aber im Gegensatz zu den zuvor aufgeführten Antworten war meine, weil ich die Methode 'loadView' in meinem neu generierten Controller (xcode 4.2, ios5) auskommentiert hatte.
Es sagte mir sogar, dass die Methode zum programmgesteuerten Erstellen der Ansicht gedacht war, aber ich habe sie verpasst, weil sie anderen Methoden wie viewDidLoad so ähnlich sah, dass ich sie normalerweise verwende und sie nicht abfange.
Um dies zu lösen, entfernen Sie einfach diese Methode, wenn Sie die Ansichtshierarchie nicht programmgesteuert mit Feder oder Storyboard erstellen.
quelle
Ich habe auch diese Probleme. Ich habe mein Projekt in xcode4.2.1 ausgeführt. Ich habe dort oben alle Kommentare gelesen, aber niemand ist cool für mich. Nach einer Weile stelle ich fest, dass ich einen Code kommentiert habe.
dann habe ich es auskommentiert. Für mich ist alles in Ordnung. Ich hoffe, das wäre hilfreich für euch.
quelle
Stellen Sie sicher, dass Sie diese Funktion in Ihrem Anwendungsdelegierten haben.
Stellen Sie sicher, dass didFinishLaunchingWithOptions YES zurückgibt. Wenn Sie die Zeile 'return YES' entfernt haben, wird der Fehler verursacht. Dieser Fehler kann besonders häufig bei Storyboard-Benutzern auftreten.
quelle
Mit meiner ersten Ansicht
MenuViewController
fügte ich hinzu:zur App Delegate-Methode:
Das hat funktioniert.
quelle
In iOS 5.0 gab es eine geringfügige Änderung, die einen Root-View-Controller erforderlich machte. Wenn Ihr Code auf älterem Beispielcode wie GLES2Sample basiert , wurde in diesen Codebeispielen kein Root-View-Controller erstellt.
Um dies zu beheben (z. B. dieses GLES2Sample),
applicationDidFinishLaunching
erstelle ich direkt in einen Root-View-Controller und hänge mein glView daran an.Dadurch verschwindet die Warnung und Ihre App wirkt sich sonst nicht wirklich aus.
quelle
Versuchen Sie, das IBOutlet des Registerkartenleisten-Controllers mit der Stammansicht im Interface Builder zu verbinden
Aber eigentlich habe ich einen solchen Fehler noch nie gesehen.
quelle
Ich habe das Problem folgendermaßen gelöst (keine der anderen oben genannten Lösungen hat geholfen):
Wählen Sie im Pulldown-Menü für "Hauptschnittstelle" einen anderen Eintrag aus, wählen Sie "Hauptfenster" erneut aus und erstellen Sie ihn neu.
quelle
Ich bin auf dasselbe Problem gestoßen, aber ich habe es verwendet
storyboard
Zuweisen meiner
storyboard
InitialViewController
zu meinen FensternrootViewController
.Im
und das löste das Problem.
quelle
Ich hatte das gleiche Problem direkt nach dem Upgrade auf Xcode 4.3 und nur, wenn ich ein Projekt von Grund auf neu startete (dh ein leeres Projekt erstellen, dann einen UIViewController erstellen und dann eine separate Nib-Datei erstellen).
Nachdem ich ALLE Zeilen eingefügt hatte, die ich früher verwendet hatte, und sichergestellt hatte, dass ich die richtigen Verbindungen hatte, wurde dieser Fehler immer wieder angezeigt, und die NIB-Datei, die ich über den View-Controller (der als rootController festgelegt war) laden wollte, wurde im Simulator nie angezeigt.
Ich habe eine einzelne Ansichtsvorlage über Xcode erstellt und mit meinem Code verglichen und ENDLICH das Problem gefunden!
Xcode 4.3 scheint standardmäßig die Methode - (void) loadView hinzuzufügen; zum Abschnitt zur Implementierung des View Controllers. Nach sorgfältigem Lesen der darin enthaltenen Kommentare wurde klar, wo das Problem lag. Der Kommentar wurde angegeben, um die loadView-Methode zu überschreiben, wenn eine Ansicht programmgesteuert erstellt wird (und ich paraphrasiere), andernfalls, um loadView NICHT zu überschreiben, wenn eine Schreibfeder verwendet wird. Es gab nichts anderes in dieser Methode, also habe ich im Affekt die Methode überschrieben (und nichts getan), während ich eine NIB-Datei verwendet habe, die den Fehler verursacht hat.
Die LÖSUNG bestand darin, entweder die loadView-Methode vollständig aus dem Implementierungsabschnitt zu entfernen oder die übergeordnete Methode durch Hinzufügen von [super loadView] aufzurufen.
Das Entfernen ist am besten, wenn die Verwendung einer NIB-Datei als Hinzufügen eines anderen Codes diese tatsächlich überschreibt.
quelle
Ich hatte die gleiche Fehlermeldung im Protokoll. Ich hatte ein UIAlertView-Popup in der Anwendung: didFinishLaunchingWithOptions. Ich habe es gelöst, indem ich den Aufruf von alertView verzögert habe, damit der Root-View-Controller Zeit zum Beenden des Ladevorgangs hat.
In der Anwendung: didFinishLaunchingWithOptions:
welches nach 1 Sekunde anruft:
quelle
Ich hatte das gleiche Problem. Wenn Sie wie ich eine fensterbasierte Anwendung "von Grund auf neu" erstellen, müssen Sie Folgendes tun: (Beachten Sie, dass dies Schritte für Xcode 4.2 sind.)
0. Stellen Sie sicher, dass Ihr Anwendungsdelegierter dem UIApplicationDelegate-Protokoll entspricht.
Angenommen, unser Delegat heißt MyAppDelegate. In MyAppDelegate.h sollten wir ungefähr so etwas haben:
1. Geben Sie den Anwendungsdelegierten in main.m an
Zum Beispiel,
2. Erstellen Sie eine Hauptfenster-Schnittstellendatei.
Klicken Sie dazu mit der rechten Maustaste auf Ihr Projekt und wählen Sie Neue Datei. Wählen Sie dort im Abschnitt iOS -> Benutzeroberfläche Fenster.
Wechseln Sie nach dem Hinzufügen der Datei zu Ihrem Projekt zur Projektzusammenfassung (klicken Sie mit der linken Maustaste auf das Projekt; klicken Sie auf Zusammenfassung). Wählen Sie unter iPhone / iPod-Bereitstellungsinformationen (und dem entsprechenden iPad-Abschnitt, falls Sie möchten) Ihre neue Schnittstellendatei unter " Kombinationsfeld "Hauptschnittstelle".
3. Schließen Sie alles im Schnittstelleneditor an
Wählen Sie Ihre Schnittstellendatei in der Dateiliste aus, um den Schnittstelleneditor aufzurufen.
Stellen Sie sicher, dass der Bereich Dienstprogramme geöffnet ist.
Fügen Sie ein neues Objekt hinzu, indem Sie ein Objekt aus der Liste "Objekte" im Bereich "Dienstprogramme" in den Bereich über oder unter Ihrem Fensterobjekt ziehen. Wählen Sie das Objekt aus. Klicken Sie im Bereich Dienstprogramme auf den Identitätsinspektor. Ändern Sie die Klasse in den Delegaten der Anwendung (in diesem Beispiel MyAppDelegate).
Rufen Sie den Verbindungsinspektor für MyAppDelegate auf. Verbinden Sie den Fensterausgang mit dem Fenster, das bereits in der Schnittstellendatei vorhanden ist.
Klicken Sie links auf den Eigentümer der Datei und dann im Bereich Dienstprogramme auf den Identitätsinspektor. Ändern Sie die Klasse in
UIApplication
Rufen Sie den Verbindungsinspektor für File's Owner auf. Verbinden Sie den Delegatenausgang mit dem MyAppDelegate-Objekt.
4. Klicken Sie abschließend und vor allem auf das Fensterobjekt in der Schnittstellendatei. Öffnen Sie den Attributinspektor. Stellen Sie sicher, dass "Beim Start sichtbar" aktiviert ist.
Das war alles, was ich tun musste, damit es für mich funktioniert. Viel Glück!
quelle
Wenn Sie MTStatusBarOverlay verwenden, wird dieser Fehler angezeigt.
MTStatusBarOverlay erstellt ein zusätzliches Fenster ([[UIApplication sharedApplication] -Fenster), das keinen Root-Controller hat.
Dies scheint kein Problem zu verursachen.
quelle
Ich habe den gleichen Fehler erhalten, nachdem ich meine Benutzeroberfläche durch ein Storyboard mit XCode 4.6.3 und iOS 6.1 ersetzt habe
Es wurde behoben, indem der gesamte Code aus didFinishLaucnhingWithOptions im AppDelegate gelöscht wurde
quelle
OrdoDei gab eine korrekte und wertvolle Antwort. Ich füge diese Antwort nur hinzu, um ein Beispiel für eine
didFinishLaunchingWithOptions
Methode zu geben , die seine Antwort verwendet und die Kommentare der anderen zu Navigation Controller berücksichtigt.quelle
Dies geschah für mich, weil ich versehentlich auskommentierte:
von
quelle
Ich konnte den Controller für die anfängliche Ansicht auf dem Zusammenfassungsbildschirm von xcode einstellen.
Klicken Sie im linken Datei-Explorer auf den obersten Projektnamen (er sollte ein kleines Blaupausen-Symbol haben). Klicken Sie in der mittleren Spalte unter "ZIELE" auf Ihren Projektnamen (daneben sollte ein kleines Bleistiftsymbol "A" angezeigt werden). Suchen Sie unter "iPhone / iPod-Bereitstellungsinformationen" nach "Hauptschnittstelle". Sie sollten in der Lage sein, eine Option aus der Dropdown-Liste auszuwählen.
quelle
Zusätzlich zu der Antwort "sho", die korrekt ist (der vierte Parameter von UIApplicationMain sollte der Name des Hauptcontrollers sein), füge ich einige Kommentare hinzu.
Ich habe kürzlich das 'Modell' einer meiner Apps von der Verwendung von MainWindow.xib geändert, um ein Fenster programmgesteuert zu erstellen. Die App verwendete eine ältere Vorlage, die das MainWindow automatisch erstellte. Da ich eine andere Controller-Ansicht XIB für iPhone 5 unterstützen wollte, ist es einfacher, die richtige XIB programmgesteuert auszuwählen, wenn der App-Delegat erstellt wird. Ich habe auch MainWindow.xib aus dem Projekt entfernt.
Das Problem war, ich habe vergessen, den vierten Parameter in UIApplication main zu füllen, und ich habe vergessen, MainWindow von "Main Interface" in der Projektzusammenfassung zu entfernen.
Dies verursachte ein GROSSES Problem: Es gab die harmlose Warnung "Anwendungen werden erwartet ..." auf Entwicklungsgeräten wieder, aber als es in den App Store ging, brach es auf Consumer-Telefonen zusammen und stürzte ab, weil MainWindow nicht mehr im Bundle enthalten war! Ich musste eine beschleunigte Überprüfung für den Bugfix anfordern.
Ein weiteres Symptom ist, dass manchmal ein weißer Block wie eine leere UIView angezeigt wurde, wenn Einstellungen geändert und die App in den Vordergrund gestellt wurden. In iPhone 5 war klar, dass es sich um einen 320x480-Block handelte. Möglicherweise wurde das fehlende MainWindow im Entwicklungsmodus mit der alten Größe erstellt. Ich hatte diesen Fehler gerade gefunden, als die ersten Berichte über den Absturz den Posteingang erreichten.
Die Installation der App aus dem App Store anstelle von XCode hat gezeigt, dass die App tatsächlich abgestürzt ist, und das MainWindow-Problem wurde im Protokoll angezeigt, sodass ich feststellen konnte, dass es sich nicht um eine spezielle Kombination von Geräten + IOS-Versionen handelte.
quelle
Um die Antwort von Mike Flynn zu ergänzen, habe ich dies seit dem Upgrade auf Xcode 7 und dem Ausführen meiner App auf einem iOS 9-Gerät zu meinem hinzugefügt
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
quelle
Dieses Problem tritt auf, wenn Sie den Interface Builder nicht richtig eingerichtet haben.
Stellen Sie sicher, dass das Fenster und die ViewController-Outlets Ihres App-Delegierten verbunden sind:
Halten Sie in Ihrer MainWindow.xib die Steuerung gedrückt, klicken Sie auf App Delegate und ziehen Sie sie auf das Window-Objekt. Fenster auswählen. Halten Sie die Kontrolle und wählen Sie den App-Delegaten erneut aus, ziehen Sie ihn auf Ihren Root-View-Controller und wählen Sie viewController aus.
quelle
Dieser Fehler wird auch angezeigt, wenn der Dateibesitzer von MainWindow.xib falsch eingestellt ist.
Der Eigentümer der Datei ist UIApplication
-> eingefügtes Objekt der App-Delegatenklasse mit dem mit dem Fenster verbundenen Fensterausgang
quelle