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

我有一个视图控制器,我放在主故事板,但当我尝试初始化和加载视图控制器我的应用程序崩溃.我正在使用的 xcode版本并没有真正告诉我我得到的错误,但我确实看到它给了我一个sigabrt信号.我不知道为什么它不起作用.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SelectDateViewController"];
    [vc setModalPresentationStyle:UIModalPresentationFullScreen];

    [self presentModalViewController:vc animated:YES];

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

解决方法

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

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

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

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

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

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

正如阿卜杜拉所提到的,你应该放弃已弃用的方法

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

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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...