【问题标题】:Application tried to present a nil model view controller应用程序试图呈现一个零模型视图控制器
【发布时间】:2013-03-13 13:27:42
【问题描述】:

我目前正在尝试在我的应用程序中实现一个介绍性(教程)部分,并且我想为用户提供随时查看它的选项。我的应用程序的主要部分是由 UIViewController XIB 文件(ViewController_iPhone.xibViewController_iPad.xib)组成的,出于介绍性视图的目的,我发现使用 Storyboard 更容易。所以简单总结一下:我正在尝试从主 ViewController (XIB) 切换到 Storyboard 中的起始 ViewController,具体取决于设备类型 -> 这一切都从 UIButton 轻按开始。

在我的 Storyboard 中,我分配了单独的 Storyboard ID,因此无论是 iPad、iPhone 还是 iPhone-4inch,它都会加载正确的视图:

故事板 ID:3-Slide1 (iPad)、4-Slide1 (iPhone)、5-Slide1 (iPhone-4inch)。

这是 ViewController.m 中的按钮代码:

NSString *nibName;
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            nibName = @"3-Slide1";
        } else {
            if ([UIScreen mainScreen].bounds.size.height == 480.0) {
                nibName = @"4-Slide1";
            } else {
                nibName = @"5-Slide1";
            }
        }
        
        IntroViewController *introViewController = [self.storyboard instantiateViewControllerWithIdentifier:nibName];
        
        [self presentViewController:introViewController animated:YES completion:nil];

SIGABRT 错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Application tried to present a nil modal view controller on target
<ViewController: 0x20865170>.

为什么会出现这个错误?

注意:有很多帖子都有相同的一般 SIGABRT 错误,但似乎都有不同的问题。

【问题讨论】:

  • 等一下。我刚刚又读了你的第一段。当前的视图控制器(带有您显示的代码的视图控制器,您尝试从中加载此介绍)是否不是从情节提要加载的?

标签: ios uiviewcontroller uistoryboard


【解决方案1】:

如果您以模态方式推送它,为什么会有从视图控制器到信息视图控制器的 segue。

我会简单地对视图控制器进行单独的转场(无论如何,一个将在不同的故事板文件中),命名转场并使用您的逻辑来确定正确的转场。然后使用performSegueWithIdentifier: 而不是instantiateViewControllerWithIdentifier

(我猜笔尖名称实际上是指笔尖的文件名。不确定,但无论如何,segue 方法是正确的方法。)

【讨论】:

  • 就此而言,似乎不应该有多个 segue:iPad/iPhone 通常位于不同的故事板中(并且每个故事板中可能有相同的 segue 名称),而 3.5 "/4" iPhone 通常不需要不同的目标控制器,只需要智能布局代码/约束。
  • 对。如果你需要简单地调整媒体,你可以在控制器中进行...
猜你喜欢
  • 2013-01-06
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2013-12-18
相关资源
最近更新 更多