2016-04-15 6 views
0

Ich unterrichte mich Objektiv C, nach dem Buch: Die große Nerd Ranch Guide und meine App stürzt ab, obwohl ich direkt aus dem Buch kopieren und nur drei Zeilen in den Code. Hier ist der Code, der es stürzt.versuchen, das Fenster von appdelegate setzen

Das Buch ist bekannt, um Tippfehler zu haben und ein anderer Gedanke ist, dass vielleicht einige davon veraltet ist? Jede Hilfe ist sehr willkommen. Danke P

BEARBEITEN ------------------------------------------- -------------------------------------------------- --------------------------------

die Linie, die die Anwendung abstürzt wird:

[ self setWindow: theWindow];

und der Grund für Krachen:

'NSInternalInconsistencyException', reason: 'Application windows are expected to have a root view controller at the end of application launch' 

Ich frage mich, ob vielleicht verwendet Blick mehr in der AppDelegate und nicht eingerichtet werden, und aus diesem Grund den Code, der zur Arbeit verwendet wird jetzt abstürzt?

+0

Wie alt ist das Buch? Sie haben das Projekt in Xcode mit einer Hauptdetailvorlage erstellt? Normalerweise erstellen Sie das Fenster nicht selbst. – Wain

+0

Wenn Sie eine Frage zu einem Absturz stellen, müssen Sie die vollständige und genaue Fehlermeldung angeben und auf die genaue Codezeile hinweisen, die den Absturz verursacht hat. – rmaddy

+0

FYI - zu lernen, wie man einen Absturz debuggen kann, besuchen Sie bitte http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1 – rmaddy

Antwort

0

Ich denke, dass die Idee ist, dass Sie einen View-Controller am Ende des Executino von AppDelegate haben müssen, so dass die App etwas für den Benutzer zeigen wird.

Sie benötigen einen Anfangs-View-Controller auf einem Storyboard setzen (‚Anwendungsfenster werden erwartet, dass am Ende des Anwendungsstarts einen Root-View-Controller haben‘ -> Ihre Nachricht Fehler)

Zum Beispiel:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"YOURSTORYBOARDNAME" bundle:nil]; 
UIViewController *initViewController = [storyBoard instantiateInitialViewController]; 
[self.window setRootViewController:initViewController]; 

Ich hoffe, dass dies nützlich sein wird.

0

Sie stellen das Fenster korrekt ein. Das Problem, das Sie haben, besteht darin, dass Sie der rootViewController-Eigenschaft Ihres Fensters irgendwann einen UIViewController zuweisen müssen, bevor Sie das Ende der Methode didFinishLaunchingWithOptions: erreichen.

dh.

#import "AppDelegate.h" 

@interface AppDelegate() 

@end 

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    CGRect windowFrame = UIScreen.mainScreen.bounds; 
    UIWindow *theWindow = [[UIWindow alloc] initWithFrame:windowFrame]; 

    UIViewController *viewController = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
    theWindow.rootViewController = viewController; 

    [self setWindow:theWindow]; 


    return YES; 
} 
@end 
0

Sie sollten das Fenster nie einstellen müssen, wenn Sie nicht mehrere Fenster verwenden möchten. Stellen Sie bei der Einführung von Storyboards einfach Ihren ersten View Controller als Root-Controller ein, und dieser View Controller wird automatisch geladen.

Verwandte Themen