8

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

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

    [self presentModalViewController:vc animated:YES];

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

4

3 回答 3

6

在最后一行设置断点以验证 vc(以及情节提要)不为零。

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

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

如果只是 vc 为 nil,则标识符不正确(在代码或情节提要中)。确保 VC 的 Storyboard ID(如屏幕截图中圈出的)与您的描述相符。通常不为此选择类名(因为您的故事板中可能有多个给定类的实例)。

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

故事板 ID

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

正如 Abdullah 所提到的,您可能应该将弃用的方法移至:

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

在这种情况下,完成块可以为零而没有问题,但 vc 不能。

于 2013-09-26T00:59:07.560 回答
0

您是否从 Storyboard 设置了初始 ViewController?如果是,请确保您的 Storyboard id 相同。如果您使用故事板,您可以直接呈现或关闭视图控制器,无需为其编写代码

希望这对你有帮助:)

于 2013-09-26T04:16:48.020 回答
0

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

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

于 2013-09-26T00:35:57.187 回答