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

Mic*_*ana 8 objective-c ios

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

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

    [self presentModalViewController:vc animated:YES];
Run Code Online (Sandbox Code Playgroud)

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

owe*_*nfi 6

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

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

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

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

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

故事板ID

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

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

[self presentViewController:vc animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

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


Abd*_*que 0

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

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