【问题标题】:Trying to initialize a view controller from storyboard尝试从情节提要初始化视图控制器
【发布时间】:2023-04-08 17:04:01
【问题描述】:

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

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

    [self presentModalViewController:vc animated:YES];

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

【问题讨论】:

  • 当您创建应用程序时,您是否启用了故事板?
  • @foriinrangeawesome 是的,我做到了。

标签: ios objective-c


【解决方案1】:

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

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

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

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

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

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

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

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

在这种情况下,完成块可以为 nil 而不会出现问题,但 vc 不能。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这很可能是原因。我想知道为什么它没有给他一个警告。
    【解决方案3】:

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

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多