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

8

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

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

    [self presentModalViewController:vc animated:YES];

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


当你创建这个应用程序时,一开始是否启用了故事板? - erdekhayser
@foriinrangeawesome 是的,是的,我做了。 - Michael Nana
3个回答

6

在最后一行设置断点以验证vc(以及storyboard)不为nil。

如果presentModalViewController的viewController参数为nil,则会崩溃。

如果两者都为nil,则您的storyboard名称可能不正确(可能性较小)。

如果只有vc为nil,则标识符不正确(无论是在代码中还是在storyboard中)。确保VC的Storyboard ID(如屏幕截图中所示)与您的描述相匹配。通常不选择类名(因为您可能在storyboards中有多个给定类的实例)。

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

Storyboard ID

编辑:

同时,调用此方法的时间非常重要,请参见presentModalViewController not working。确保接收消息的视图控制器已经显示(即在viewDidAppear中调用,而不是在viewDidLoad中调用)。

正如Abdullah所提到的,您应该将过时的方法移至:

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

在这种情况下,完成块可以是nil而没有问题,但vc必须不为nil。

0

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

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


那很可能是原因。不过我想知道为什么它没有给他警告。 - erdekhayser

0
你是否从Storyboard设置了初始ViewController? 如果是,则确保你的Storyboard id相同。 如果你正在使用Storyboard,你可以直接呈现或解除呈现viewController,无需编写代码。
希望这能帮到你 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接