Art*_*sev 380 objective-c ios
我在控制台中收到以下错误:
应用程序在应用程序启动结束时应具有根视图控制器
以下是我的application:didFinishLaunchWithOptions方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set Background Color/Pattern
self.window.backgroundColor = [UIColor blackColor];
self.tabBarController.tabBar.backgroundColor = [UIColor clearColor];
//self.window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"testbg.png"]];
// Set StatusBar Color
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
在Interface Builder中,UITabBarController代理连接到App Delegate.
有谁知道如何解决这个问题?
Ord*_*Dei 434
在AppDelegate中替换
[window addSubview:[someController view]];
Run Code Online (Sandbox Code Playgroud)
至
[self.window setRootViewController:someController];
Run Code Online (Sandbox Code Playgroud)
sho*_*sho 188
我有同样的问题.检查你的main.m. 最后一个参数应设置为实现UIApplicationDelegate协议的类的名称.
retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
Run Code Online (Sandbox Code Playgroud)
War*_*kst 69
尝试更改加载的第一个视图控制器时,我遇到了同样的错误
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
起初我并不是真的知道错误来自哪里,所以我把它缩小了,发现出了什么问题.事实证明,我试图在视频实际出现在屏幕之前更改视图的显示.因此解决方案是在viewcontroller中移动此代码,这给我带来了麻烦
- (void)viewDidLoad
至
- (void)viewDidAppear:(BOOL)animated
并且错误停止显示.我的问题具体是由一个UIAlertView节目引起的.
在你的情况下,我建议你查看tabBarController的活动视图控制器中的代码(因为它可能是该视图控制器中的一个问题).如果这不起作用,请尝试在nib文件中而不是在代码中设置起始设置 - 或者如果要在代码中执行此操作,请尝试将代码移动到tabBarController的活动viewcontroller的相应方法.
祝好运!
jlu*_*jan 47
我从"空应用程序"模板开始然后手动添加XIB时得到了这个.我通过设置Sunny建议的主Nib名称来解决它.此方案中缺少的步骤是删除
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Run Code Online (Sandbox Code Playgroud)
从
application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Run Code Online (Sandbox Code Playgroud)
因为它将覆盖在Xib文件中创建的窗口实例.这假设您已经创建了一个ViewController并将其与您的窗口和App Delegate连接在XIB文件中.
ari*_*dam 46
这发生在我身上.通过编辑.plist文件解决.指定主nib文件基名.(应为MainWindow.xib).希望这会有所帮助.

小智 27
最近,当使用ios5 sdk构建项目时,我遇到了同样的问题.起初它正在构建并正常运行,但在此之后出现了错误.
就我而言,解决方案相当简单.
缺少的是,我的应用程序目标的摘要选项卡中的主界面属性被删除了.所以我需要再次设置它.
如果这不是重点,并且tabBarController仍然是nil,则可以始终以编程方式创建窗口和根控制器.作为后备,我将以下代码添加到我的项目中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (!window && !navigationController) {
NSLog(@"Window and navigation controller not loaded from nib. Will be created programatically.");
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
UIViewController *viewController1, *viewController2;
viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
self.window.rootViewController = self.tabBarController;
}
else {
[window addSubview:[tabBarController view]];
}
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
只有在实施了sho的解决方案时,这才有效.
Mik*_*ynn 24
我升级到iOS9并开始无处可寻.我能够解决它,但添加以下代码- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
NSArray *windows = [[UIApplication sharedApplication] windows];
for(UIWindow *window in windows) {
if(window.rootViewController == nil){
UIViewController* vc = [[UIViewController alloc]initWithNibName:nil bundle:nil];
window.rootViewController = vc;
}
}
Run Code Online (Sandbox Code Playgroud)
Rye*_*AC3 21
上述建议都没有解决我的问题.我是这样的:
加:
window.rootViewController = navigationController;
Run Code Online (Sandbox Code Playgroud)
后:
[window addSubview:navigationController.view];
Run Code Online (Sandbox Code Playgroud)
在我的appdelegate中
- (void)applicationDidFinishLaunching:(UIApplication *)application {
Run Code Online (Sandbox Code Playgroud)
bea*_*ain 20
![图片![]](https://i.stack.imgur.com/cY3GG.png)
rém*_*émy 19
如何为iOS5添加RootViewController
如果您的应用程序到目前为止没有使用RootViewController,只需按"文件">"新建">"新建文件"创建一个;); 选择将其UIViewController subclass
命名为RootViewController,取消选中With XIB for user interface(假设您已有)并将此代码放入AppDelegate :: didFinishLaunchingWithOptions
rootViewController = [[RootViewController alloc] init];
window.rootViewController = rootViewController;
Run Code Online (Sandbox Code Playgroud)
当然 - 你必须导入RootViewController.h并创建变量
这是一篇关于RootViewController和AppDelegate 的好文章,
ant*_*ope 11
确保在应用程序委托中具有此功能.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
return YES;
}
Run Code Online (Sandbox Code Playgroud)
确保didFinishLaunchingWithOptions返回YES.如果您碰巧删除了"返回YES"行,则会导致错误.故事板用户可能特别常见此错误.
trc*_*den 11
我也有这个错误,但不同于之前列出的任何答案我的是因为我在我新生成的控制器(xcode 4.2,ios5)中取消注释了方法'loadView'.
//Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView
{
}
Run Code Online (Sandbox Code Playgroud)
它甚至告诉我该方法是以编程方式创建视图但我错过了它,因为它看起来与其他方法如viewDidLoad非常相似,我通常使用我没有抓住它.
如果您不是以编程方式创建视图层次结构(即使用nib或storyboard),则只需删除该方法.
Bru*_*Lee 11
我也遇到了这个问题.我让我的项目在xcode4.2.1中运行.我已经阅读了那里的所有评论,但没有人对我很酷.过了一会儿,我发现我评论了一段代码.
//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
Run Code Online (Sandbox Code Playgroud)
然后我取消评论它.一切都对我好.希望这对你们有帮助.
小智 10
我的第一个观点是MenuViewController我添加:
MenuViewController *menuViewController = [[MenuViewController alloc]init];
self.window.rootViewController = menuViewController;
Run Code Online (Sandbox Code Playgroud)
在App Delegate方法上:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
}
Run Code Online (Sandbox Code Playgroud)
那很有效.
bob*_*obo 10
iOS 5.0左右有一点变化,需要你有一个根视图控制器.如果您的代码基于较旧的示例代码(例如GLES2Sample),则不会在这些代码示例中创建根视图控制器.
为了修复(例如GLES2Sample),applicationDidFinishLaunching我创建了一个根视图控制器并将我的glView附加到它.
- (void) applicationDidFinishLaunching:(UIApplication *)application
{
// To make the 'Application windows are expected
// to have a root view controller
// at the end of application launch' warning go away,
// you should have a rootviewcontroller,
// but this app doesn't have one at all.
window.rootViewController = [[UIViewController alloc] init]; // MAKE ONE
window.rootViewController.view = glView; // MUST SET THIS UP OTHERWISE
// THE ROOTVIEWCONTROLLER SEEMS TO INTERCEPT TOUCH EVENTS
}
Run Code Online (Sandbox Code Playgroud)
这会使警告消失,并且不会影响您的应用程序.
尝试将标签栏控制器的IBOutlet连接到Interface Builder中的根视图而不是
self.window.rootViewController = self.tabBarController;
Run Code Online (Sandbox Code Playgroud)
但实际上我之前没有见过这样的错误.
我遇到了同样的问题,但我正在使用 storyboard
将我的分配storyboard InitialViewController给我的窗口rootViewController.
在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
...
UIStoryboard *stb = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
self.window.rootViewController = [stb instantiateInitialViewController];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这解决了这个问题.
我在升级到Xcode 4.3后立即开始遇到同样的问题,并且只在从头开始创建一个项目时(即创建一个空项目,然后创建一个UIViewController,然后创建一个单独的nib文件).
放完我以前的所有行,并确保我有正确的连接,我不断收到该错误,我试图通过视图控制器(设置为rootController)加载的nib文件从未在模拟器中显示.
我通过Xcode创建了一个单独的视图模板,并将其与我的代码进行了比较,最后发现了问题!
Xcode 4.3似乎默认添加方法 - (void)loadView; 到视图控制器实现部分.仔细阅读其中的评论后,问题就变得清晰了.如果以编程方式创建视图(并且我正在解释),则注释指示覆盖loadView方法,否则如果使用nib则不覆盖loadView.这个方法里面没有别的东西,所以在影响中我覆盖了方法(并且什么也不做)尽管使用了一个nib文件,它给出了错误.
解决方案是从实现部分中完全删除loadView方法,或者通过添加[super loadView]来调用父方法.
删除它最好是使用NIB文件,因为添加任何其他代码实际上会覆盖它.
我在日志中有相同的错误消息.我在应用程序中弹出了UIAlertView:didFinishLaunchingWithOptions.我通过延迟对alertView的调用来解决它,以便让根视图控制器有时间完成加载.
在应用程序中:didFinishLaunchingWithOptions:
[self performSelector:@selector(callPopUp) withObject:nil afterDelay:1.0];
Run Code Online (Sandbox Code Playgroud)
1秒钟后调用:
- (void)callPopUp
{
// call UIAlertView
}
Run Code Online (Sandbox Code Playgroud)
我有同样的问题.如果您像我一样"从头开始"构建基于窗口的应用程序,则需要执行以下操作:(注意,这些是Xcode 4.2的步骤.)
0.确保您的应用程序委托符合UIApplicationDelegate协议.
例如,假设我们的委托称为MyAppDelegate.在MyAppDelegate.h中,我们应该有这样的东西:
@interface MyAppDelegate :
NSObject <UIApplicationDelegate> // etc...Run Code Online (Sandbox Code Playgroud)
1.在main.m中指定应用程序委托
例如,
#import "MyAppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv,
nil, NSStringFromClass([MyAppDelegate class]));
}
}Run Code Online (Sandbox Code Playgroud)
2.创建主窗口界面文件.
为此,请右键单击项目,然后选择"新建文件".从那里,从iOS - >用户界面部分选择窗口.
将文件添加到您的项目后,转至项目的摘要(项目左键单击;单击摘要)(如果你喜欢和相应的iPad的部分)在iPhone/iPod的部署信息和选择新的接口文件中的"主界面"组合框.
3.在界面编辑器中将其全部连接起来
在文件列表中选择您的接口文件以显示界面编辑器.
确保"实用工具"窗格已打开.
通过将"实用程序"窗格中"对象"列表中的"对象"拖动到Window对象下方的空白区域,添加新对象.选择对象.单击"实用工具"窗格中的"标识"检查器.将Class更改为应用程序的委托(在此示例中为MyAppDelegate.)
打开MyAppDelegate的连接检查器.将窗口连接到接口文件中已存在的窗口.
单击左侧的文件所有者,然后单击"实用工具"窗格中的"标识"检查器.将班级更改为UIApplication
打开文件所有者的连接检查器.将代理插座连接到MyAppDelegate对象.
4.最后,非常重要的是,单击界面文件中的Window对象.打开"属性"检查器.确保选中"在启动时可见".
这就是我必须做的才能让它为我工作.祝好运!
如果您使用MTStatusBarOverlay,那么您将收到此错误.
MTStatusBarOverlay创建一个没有根控制器的附加窗口([[UIApplication sharedApplication]窗口).
这似乎不会导致问题.
使用XCode 4.6.3和iOS 6.1将故事板替换为UI后收到相同的错误
通过清除AppDelegate中didFinishLaucnhingWithOptions的所有代码解决了这个问题
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
OrdoDei给出了正确而有价值的答案.我添加这个答案只是为了给出一个didFinishLaunchingWithOptions方法的例子,该方法使用他的答案以及其他人对导航控制器的评论.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
// Instantiate the main menu view controller (UITableView with menu items).
// Pass that view controller to the nav controller as the root of the nav stack.
// This nav stack drives our *entire* app.
UIViewController *viewController = [[XMMainMenuTableViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
// Instantiate the app's window. Then get the nav controller's view into that window, and onto the screen.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// [self.window addSubview:self.navigationController.view];
// The disabled line above was replaced by line below. Fixed Apple's complaint in log: Application windows are expected to have a root view controller at the end of application launch
[self.window setRootViewController:self.navigationController];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
290427 次 |
| 最近记录: |