问题描述
- 报错:nil modal view controller
-
得到了如下报错:**Application tried to present a nil modal view controller on target**。我在运行的程序是,首先判断条件是否满足,启动后修改初始化视图控制器。- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( NSDictionary *)launchOptions { if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) { ViewControllerOne *vc1 = [[ViewControllerOne alloc]init]; vc1=[self.storyboard instantiateViewControllerWithIdentifier: @"vc1"]; [self presentViewController:vc1 animated:YES completion:Nil]; } else { ViewControllerTwo *vc2 = [[ViewControllerTwo alloc]init]; vc2=[self.storyboard instantiateViewControllerWithIdentifier: @"vc2"]; [self presentViewController:vc2 animated:YES completion:Nil]; } // Override point for customization after application launch. return YES; }
解决方案
如果是从storyboard中来创建控制器不需要先
ViewControllerOne *vc1 = [[ViewControllerOne alloc]init];
修改后的代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIViewController *rootVC;
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]) {
rootVC=[self.storyboard instantiateViewControllerWithIdentifier: @"vc1"];
} else {
rootVC=[self.storyboard instantiateViewControllerWithIdentifier: @"vc2"];
}
window.rootViewConroller=rootVC;
[self.window makeKeyAndVisible];
return YES;
}
解决方案二:
我分析你是少了UIWindow:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
UIViewController *mainViewController = [storyboard instantiateInitialViewController];
self.window.rootViewController = mainViewController;
return YES;
}
然后去掉这句:
[storyboard instantiateInitialViewController];
加上这句
[self.storyboard instantiateViewControllerWithIdentifier: @"vc1"];
时间: 2025-01-22 13:38:57