我有一个视图控制器放置在主故事板中,但是当我尝试初始化并加载视图控制器时,我的应用程序崩溃了。我使用的 xcode 版本并没有真正告诉我我正确得到的错误,但我确实看到它给了我一个 sigabrt 信号。我不知道为什么它不起作用。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SelectDateViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:YES];
我就是这么称呼它的。我使用的所有名称都是正确的,但我仍然不明白为什么它会崩溃。
在最后一行设置断点以验证 vc (以及故事板)不为零。
如果 presentModalViewController 的 viewController 参数为零,则会崩溃。
如果两者都为零,则您的故事板名称可能不正确(可能性较小)。
如果 vc 为零,则标识符不正确(无论是在代码中还是在故事板中)。确保 VC 的 Storyboard ID(如屏幕截图中圆圈所示)与您的描述相符。通常不为此选择类名称(因为故事板中可能有给定类的多个实例)。
Storyboard ID 区分大小写并且必须是唯一的。我发现设置它的可靠方法是在选择视图控制器并按回车键结束编辑后在该字段中输入名称(不要只是单击该字段)。我注意到从 Xcode 4 转换到 5 时情节提要中发生了一些损坏,反之亦然,因此深入研究 plist/xml 可能也会有所帮助。
编辑:
调用此函数的时间也很重要,请参阅PresentModalViewController 不工作 https://stackoverflow.com/questions/2487541/presentmodalviewcontroller-not-working/2487574#comment7200904_2487574。
确保接收消息的视图控制器已经显示(即在 viewDidAppear 中调用,而不是在 viewDidLoad 中调用)。
正如阿卜杜拉所提到的,您可能应该放弃已弃用的方法:
[self presentViewController:vc animated:YES completion:nil];
在这种情况下,完成块可以为 nil 没有问题,但 vc 不能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)