当我运行应用程序时,我在控制台中得到一条消息,上面写着:
2011-11-16 19:17:41.292 Juice[8674:707]应用程序被期望在应用程序启动结束时有一个根视图控制器
我从别人那里听说这与didFinishLaunchingWithOptions
方法有关
如果有人有任何建议,为什么我得到这个错误,我将不胜感激。
方法的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
return YES;
}
您应该替换
[window addSubview:tabBarController.view];
[self.window setRootViewController:tabBarController];
也许你用'空应用程序'构建你的项目,忘记在你的didFinishLaunchingWithOptions
中设置rootViewController
(它存在于你的AppDelegate.m)。
但是,如果您使用'单视图应用程序'或其他类型构建项目,该项目将默认通过xib
设置rootViewController
(可能是主窗口)。xib(在项目中)。
我在iOS 5中也遇到了同样的问题,即在一个"空"项目中添加了故事板。我需要删除AppDelegate中的所有行。
设置值为self.window
。- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
//self.window.backgroundColor = [UIColor whiteColor];
//[self.window makeKeyAndVisible];
return YES;
}
如果您有主窗口。xib,确保在Target的摘要中将Main Interface设置为MainWindow。
我得到这个错误Applications are expected to have a root view controller at the end of application launch
消失的方式是确保我的根视图控制器中的loadView
方法正在调用[super loadView]
。希望这能帮助到一些人。
尝试使用self.window
而不是window
(如果您的设置有window
是synthesized
与@synthesize window=_window;
类似):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self.window addSubview:tabBarController.view];
[self.window makeKeyAndVisible];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
return YES;
}
第二种可能性:
In your main。我要确保最后一个参数是App Delegate的名称。在您的例子中,它看起来应该是:
retVal = UIApplicationMain(argc, argv, nil, @"JuiceAppDelegate");
解决方案:
正如@marcus13在下面的评论中所说…应用程序预计在应用程序启动结束时有一个根视图控制器-通过将UIAlertView
方法从-(void)viewDidLoad
移动到-(void)viewDidAppear:(BOOL)animated
另一个原因:
我在IB附加文件所有者到一个新的小ImageView我拖到视图。我没有在.h文件中将其称为IBOutlet,所以当我按ctrl拖动到它时,新的Imageview没有被列为可能的连接。小黑盒子中显示的唯一可能性是View。我一定是无意中点击了。我做了一些改变,然后运行程序,得到了根控制器错误。修复是在xib - IB屏幕中重新连接文件所有者到底部视图。
我在从头开始构建一个新项目时遇到了这个问题。我添加了一个StoryBoard并构建了我的整个界面,但是我没有选择模板。
当你这样做的时候,你必须确保3个主要的事情:
始终选择您的初始控制器(TabBarcontroller或NavigationController)作为Storyboard中的初始视图
修改Appdelegate中的代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
,
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
return YES;
}
检查您的[ProjectName]-Info。plist文件。如果没有名为"Main storyboard file base name"的键,您必须手动添加它并将其值设置为故事板文件的名称(不带扩展名)。
在我完成所有这些步骤之后,我的应用程序完美地运行了。
我也有同样的问题。我看到的只是黑屏。原来我无意中删除了:
[self.window makeKeyAndVisible];
从我的代码。希望这对大家有所帮助!
我在storyboard的根视图控制器中将两个outlet分配给"view"。右键单击"视图控制器",确保只有一个"视图"。
我在开发使用sqlite数据库的应用程序时也有同样的错误。当db文件传输失败时,我正在显示alertView。这是一个错误,因为你不能显示任何弹出窗口/alertview/动作没有任何rootViewController设置!
我通过确保创建和显示这些警报/弹出窗口/动作表的任何函数都在
之后调用来修复它self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
[someObject functionthatDisplayAlerts];
我知道这篇文章很老了,但是我今天偶然看到了。
这是因为我在didFinishLaunchingWithOptions中创建了一个UIAlertView
。
假设我们不应该这样做,因为我把它注释掉了,错误消失了。我删除了注释,错误又出现了。
应用程序没有崩溃,我只是得到了记录错误。
我有同样的问题与我的应用程序。它出现当我添加另一个视图控制器到我的项目,并试图将其设置为AppDelegate中的根视图控制器。我尝试了几种解决方法,但没有一种能解决问题。最后我找到了原因:我有两个本地化版本的主窗口。xib文件(一个用于德语,另一个用于英语本地化)。所以我删除了英文文件,并重新连接了MainView.xib中的IBOutlets。这就解决了问题。
我不确定这是否会对其他人有所帮助,但是如果你已经使用了interface builder来创建mainWindow,并且已经完成了委托之间的所有链接,请确保你在应用程序中没有以下代码:
[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]
我有同样的错误,直到我删除上面的行。希望这对你有帮助!
编辑:做上面现在有我的viewControllers viewDidAppear方法被调用两次?
如果你正在使用故事板,但创建了一个空项目,你可能忘记设置主故事板到你的*。在您的项目设置中的Summary选项卡中的storyboard文件。它帮助我解决了这个问题。
如果你从一个空开始,你必须把这个添加到你的AppDelegate中。m文件,将窗口"指向"rootViewController (self.window.rootViewController = [[[ViewControllerName alloc] initWithNibName:@"ViewControllerName" bundle:nil] autorelease];
)
一样:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
self.window.rootViewController = [[[ViewControllerName alloc] initWithNibName:@"ViewControllerName" bundle:nil] autorelease];
[self.window makeKeyAndVisible];
return YES;
}