尝试从故事板初始化视图控制器

时间:2013-09-26 00:31:06

标签: ios objective-c

我有一个视图控制器,我放在主故事板中但是当我尝试初始化并加载视图控制器时,我的应用程序崩溃了。我正在使用的xcode版本并没有真正告诉我我得到的错误,但我确实看到它给了我一个sigabrt信号。我不知道为什么它不起作用。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SelectDateViewController"];
    [vc setModalPresentationStyle:UIModalPresentationFullScreen];

    [self presentModalViewController:vc animated:YES];

这就是我所说的。我使用的所有名称都是正确的,但我仍然不明白为什么它会崩溃。

3 个答案:

答案 0 :(得分:6)

在最后一行设置断点以验证vc(以及故事板)不是零。

如果其viewController参数为nil,则presentModalViewController将崩溃。

如果两者都是零,那么您的故事板名称可能不正确(不太可能)。

如果只是vc为nil,则标识符不正确(在代码或故事板中)。确保VC的故事板ID(如屏幕截图中的圆圈所示)与您的描述相符。习惯上不为此选择类名(因为您的故事板中可能有多个给定类的实例)。

Storyboard ID区分大小写,必须是唯一的。我发现设置它的确定方法是在选择视图控制器并按返回结束编辑后键入该字段中的名称(不要只是单击该字段)。我注意到在从Xcode 4转换到5时会在故事板中发生一些损坏,反之亦然,所以潜入plist / xml也可能有所帮助。

Storyboard ID

编辑: 此时调用的时间也很重要,请参阅 presentModalViewController not working。 确保已经显示接收消息的视图控制器(即在viewDidAppear中调用,而不是在viewDidLoad中调用)。

正如阿卜杜拉所提到的,你应该将弃用的方法移到:

[self presentViewController:vc animated:YES completion:nil];

在这种情况下,完成块可以是nil而没有问题,但vc一定不能。

答案 1 :(得分:0)

[self presentModalViewController:vc animated:YES];已弃用。

尝试: [self presentViewController:vc animated:YES completion:nil];

答案 2 :(得分:0)

您是否从Storyboard设置了初始ViewController? 如果是,请确保您的Storyboard ID相同。 如果您使用的是故事板,则可以直接显示或关闭viewController,无需为其编写代码

希望这能帮到你:)

相关问题