【问题标题】:"Applications are expected to have a root view controller at the end of application launch" error only on device“应用程序在应用程序启动结束时应该有一个根视图控制器”错误仅在设备上
【发布时间】:2012-04-10 14:30:49
【问题描述】:

我知道还有其他帖子有类似的问题,我已经检查过了,但似乎没有一个是关于我的具体问题,所以请多多包涵。

我正在开发一个应该只在 iPad 上运行的应用程序,所以没有通用的东西:MainWindow nib 文件是为 iPad 设计的。

问题是,只要我在 Xcode(5.0 和 5.1)的 iPad 模拟器上运行它,一切正常。但是,一旦我尝试在实际的 iPad(使用 iOs 5.0)上运行它,我得到的只是一个空白屏幕,并且控制台上的“应用程序在应用程序启动结束时应该有一个根视图控制器”消息。

下面是一些应该相关的代码:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

...
self.window.rootViewController = self.splitViewController;
[self.window makeKeyAndVisible];

VistaInizialeViewController *inizialeAppoggio = [[VistaInizialeViewController alloc] initWithNibName:@"VistaInizialeViewController" bundle:nil];
self.vistaIniziale = inizialeAppoggio;
[inizialeAppoggio release];
 id debug = self.window.rootViewController;
[self.window.rootViewController.view addSubview:self.vistaIniziale.view];
...
debug = self.window.rootViewController;

所以让我感到困惑的是:如果我在模拟器上一步一步地运行上面的代码,调试变量(根视图控制器)会被初始化,而如果我在真实设备上运行它,它只是无。

好的,这就是我的建议,我非常感谢任何帮助。

谢谢大家。

【问题讨论】:

    标签: objective-c ios cocoa-touch ipad nsviewcontroller


    【解决方案1】:

    1) 设备区分大小写,模拟器不区分。

    您确定 nib 文件名为“VistaInizialeViewController”,而不是“vistaInizialeViewController”或“VistainizialeViewController”之类的名称吗?

    2) 检查 self.splitViewcontroller 是否不是 nil - 确保您为启动时加载的主 xib 指定了正确的 xib 文件名(或者如果您在代码中生成它,则在断点处并逐步验证它的生成是否正确)

    【讨论】:

    • 不,nib文件实际上叫做“VistaInizialeViewController”。这是来自复制粘贴序列,所以我很确定。
    【解决方案2】:

    好的,我解决了。 我所做的是在设置 self.window.rootViewController 之前添加以下代码

    UISplitViewController *splitAppoggio = [[UISplitViewController alloc] init];
    CategoriesViewController *categorieVC = [[[CategoriesViewController alloc] init] autorelease];
    DetailViewController *dettaglioVC = [[[DetailViewController alloc] init] autorelease];
    categorieVC.detailViewController = dettaglioVC;
    UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:categorieVC];
    NSArray *arrayVC = [NSArray arrayWithObjects:navVC,dettaglioVC, nil];
    splitAppoggio.viewControllers = arrayVC;
    splitAppoggio.delegate = dettaglioVC;
    self.splitViewController = splitAppoggio;
    [splitAppoggio release]; 
    

    有了它,它也可以在实际设备上正常工作。 为什么它不需要它在模拟器上运行,而它需要在 iPad 上运行仍然超出我的能力......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-01
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多