当我运行我的应用程序时,我在控制台中收到一条消息:
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;
}
答案 0 :(得分:54)
您应该替换
[window addSubview:tabBarController.view];
到
[self.window setRootViewController:tabBarController];
也许您使用“空应用”构建了项目,但忘记在rootViewController
中设置didFinishLaunchingWithOptions
(存在于 AppDelegate.m )。
但是,如果使用“单一视图应用程序”或其他类型构建项目,项目默认情况下会rootViewController
通过xib
设置(可能是项目中的 MainWindow.xib 。
答案 1 :(得分:13)
在将一个故事板添加到“空”项目后,我在iOS 5上遇到了同样的问题。事实证明我必须删除AppDelegate.m中将值设置为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;
}
答案 2 :(得分:6)
如果您有MainWindow.xib,请确保将Target的摘要中的Main Interface设置为MainWindow。
答案 3 :(得分:4)
我让这个错误Applications are expected to have a root view controller at the end of application launch
消失的方法是确保我的根视图控制器中的loadView
方法调用[super loadView]
。希望这有助于某人。
答案 4 :(得分:3)
尝试使用self.window
代替window
(如果您的设置window
为synthesized
@synthesize window=_window;
,则<{1}}:
- (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;
}
第二种可能性:
在main.m中确保最后一个参数是App Delegate的名称。在您的情况下,它看起来应该是:
retVal = UIApplicationMain(argc, argv, nil, @"JuiceAppDelegate");
解决方案:
正如@ marcus13在下面的评论中说的那样。修复后的答案如下:Applications are expected to have a root view controller at the end of application launch - 将UIAlertView
方法从-(void)viewDidLoad
移到-(void)viewDidAppear:(BOOL)animated
}
答案 5 :(得分:2)
另一个原因:
我在IB中将文件所有者附加到一个新的小ImageView,我将其拖到View上。我没有在.h文件中将其称为IBOutlet,因此当我按住Ctrl键拖动它时,新的Imageview未被列为可能的连接。小黑框中显示的唯一可能是View。我必须在不经意间点击。我做了一些更改然后运行程序并得到根控制器错误。修复程序将文件所有者重新连接到xib-IB屏幕中的底部视图。
答案 6 :(得分:2)
我从头开始构建一个新项目时遇到了这个问题。我添加了一个StoryBoard并构建了我的整个界面,但我没有选择模板。
当这样做时,你必须确定3件主要的事情:
始终选择初始控制器(TabBarcontroller或NavigationController)作为故事板中的初始视图。
从此
更改Appdelegate.m中的代码- (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文件。如果没有名为&#34;主故事板文件基本名称&#34;的密钥,则必须手动添加它并将其值设置为故事板文件的名称(不带扩展名)。
完成所有这些步骤后,我的应用程序运行完美。
答案 7 :(得分:1)
我也有同样的问题。我得到的只是一个黑屏。结果我无意中删除了:
[self.window makeKeyAndVisible];
来自我的代码。希望这有助于某人!
答案 8 :(得分:1)
我在故事板的根视图控制器中有两个分配给“view”的插座。右键单击“视图控制器”并确保只有一个“视图”。
答案 9 :(得分:1)
在开发使用sqlite数据库的应用程序时,我也遇到了同样的错误。 我在db文件传输失败时显示alertView。 这是一个错误,因为如果没有设置rootViewController,你就无法显示任何popovers / alertview / actions!
我通过确保在
之后调用创建和显示这些警报/弹出窗口/操作表的任何函数来修复它self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
[someObject functionthatDisplayAlerts];
答案 10 :(得分:1)
我知道这篇文章很老但我今天遇到了这个帖子。
这是因为我在didFinishLaunchingWithOptions中创建了UIAlertView
。
假设我们不应该这样做因为我评论了它并且错误消失了。我删除了我的评论,错误又回来了。
该应用程序没有崩溃,我只是得到了记录错误。
答案 11 :(得分:1)
我的应用程序遇到了同样的问题。当我向我的项目添加另一个视图控制器并尝试将其设置为AppDelegate中的根视图控制器时,它就出现了。我尝试了几种解决方案,但没有一种可以解决问题。最后我找到了原因:我有两个本地化版本的MainWindow.xib文件(一个用于德语,另一个用于英语本地化)。所以我删除了英文文件并重新连接了MainView.xib中的IBOutlets。这解决了这个问题。
答案 12 :(得分:1)
我不确定这是否会对其他人有所帮助,但如果您使用界面构建器来创建mainWindow并完成了委托之间的所有链接,请确保在应用程序中没有以下代码:didFinishLaunching。 ..
[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]
在删除上述行之前,我遇到了同样的错误。希望有所帮助!
编辑:执行上述操作现在我的viewControllers viewDidAppear方法被调用了两次?
答案 13 :(得分:0)
如果您正在使用Storyboard,但创建了一个空项目,则可能忘记将主故事板设置为项目摘要标签中的* .storyboard文件设置。它帮助我解决了这个问题。
答案 14 :(得分:0)
如果你是从一个空的开始,你必须对你的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;
}