应用程序试图呈现一个nil模型视图控制器

时间:2013-03-23 20:11:11

标签: ios uiviewcontroller uistoryboard

我目前正在尝试在我的应用程序中实现一个介绍性(教程)部分,我想让用户随时查看它。我的应用程序的主要部分是由UIViewController XIB文件(ViewController_iPhone.xibViewController_iPad.xib)组成的,为了我的介绍性视图,我发现使用Storyboard更容易。所以在一个快速摘要中:我试图从主ViewController(XIB)切换到Storyboard中的起始ViewController,具体取决于设备类型 - >这一切都始于UIButton水龙头。

在我的故事板中,我已经分配了个人故事板ID,因此无论是iPad,iPhone还是iPhone-4英寸,它都会加载正确的视图:

故事板ID:3-Slide1(iPad),4-Slide1(iPhone),5-Slide1(iPhone-4英寸)。

Screenshot

以下是 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错误,但似乎都有不同的问题。

1 个答案:

答案 0 :(得分:1)

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

我只是对视图控制器进行单独的segue(一个将在不同的storyboard文件中,无论如何),命名segue并使用你的逻辑来确定正确的segue。然后使用performSegueWithIdentifier:而不是instantiateViewControllerWithIdentifier

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