我在主 Storyboard中放置了一个 View Controller ,但是当我尝试初始化和加载 View Controller 时,我的应用程序崩溃了。我使用的 xcode 版本并没有真正告诉我正确得到的错误,但我确实看到它给了我一个 sigabrt 信号。我不知道为什么它不起作用。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SelectDateViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:YES];
我是这样调用它的。我使用的所有名称都是正确的,但我仍然不明白为什么会崩溃。
最佳答案
在最后一行设置断点以验证 vc(以及 Storyboard)是否为零。
如果 viewController 参数为 nil,presentModalViewController 将崩溃。
如果两者都为零,那么您的 Storyboard名称可能不正确(不太可能)。
如果只有 vc 为 nil,则标识符不正确(在代码或 Storyboard 中)。确保 VC 的 Storyboard ID(如屏幕截图中圈出的那样)与您的描述相符。通常不为此选择类名(因为您的 Storyboard 中可能有多个给定类的实例)。
Storyboard ID 区分大小写并且必须是唯一的。我发现设置它的可靠方法是在选择 View Controller 并按返回结束编辑后在该字段中键入名称(不要只是单击该字段)。我注意到在从 Xcode 4 转换到 5 时 Storyboard中发生了一些损坏,反之亦然,因此深入研究 plist/xml 可能也会有所帮助。
编辑: 调用它的时间也很重要,请参见 presentModalViewController not working . 确保接收消息的 View Controller 已经显示(即在 viewDidAppear 中调用,而不是 viewDidLoad)。
正如 Abdullah 所提到的,您可能应该将已弃用的方法移至:
[self presentViewController:vc animated:YES completion:nil];
在这种情况下,完成 block 可以是 nil 没有问题,但 vc 不能是。
关于ios - 尝试从 Storyboard初始化 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017396/