试图从appdelegate设置窗口

时间:2016-04-15 22:30:47

标签: ios objective-c window appdelegate

我正在教自己客观的C,跟着这本书:大书呆子牧场指南和我的应用程序崩溃,虽然我直接从书中复制,只有三行代码。这是崩溃它的代码。

#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];
    [self setWindow:theWindow];


    return YES;

}

这本书众所周知有拼写错误,另一个想法是,有些可能会被弃用?欢迎任何帮助。谢谢P

EDIT ---------------------------------------------- -------------------------------------------------- -----------------------------

崩溃应用程序的行是:

[self setWindow:theWindow];

以及崩溃的原因:

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

我只是想知道是否可能在appDelegate中设置了以后的视图而不再这样了,这就是为什么过去工作的代码现在崩溃了?

3 个答案:

答案 0 :(得分:1)

您正在正确设置窗口。您遇到的问题是您需要在到达didFinishLaunchingWithOptions:方法结束之前的某个时刻将UIViewController分配给窗口的rootViewController属性。

#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

答案 1 :(得分:0)

我认为您需要在AppDelegate的executino末尾有一个视图控制器,以便应用程序向用户显示内容。

您需要在Storyboard上设置初始视图控制器('应用程序窗口应在应用程序启动结束时具有根视图控制器' - >您的错误消息)

例如:

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

我希望这会有用。

答案 2 :(得分:0)

除非您决定使用多个窗口,否则不必设置窗口。通过引入故事板,只需将您的第一个View Controller设置为根控制器,此View Controller将自动加载