我正在教自己客观的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中设置了以后的视图而不再这样了,这就是为什么过去工作的代码现在崩溃了?
答案 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将自动加载