【问题标题】:How do I avoid using the [UITableViewController loadView] when trying to present a UIViewController (and not a UITableViewController)尝试呈现 UIViewController(而不是 UITableViewController)时如何避免使用 [UITableViewController loadView]
【发布时间】:2019-04-15 16:21:44
【问题描述】:

我正在制作一个 iPad 应用程序,其中包含一个用于设置选项的视图。 这个“选项”视图有两个容器视图,每个视图都包含一个 TableView,其中包含两种不同的选项,并切换以打开或关闭这些选项。 问题是,当我尝试从我的主 ViewController 中创建一个将打开选项视图的按钮时,我收到以下错误:

Screenshot of signal SIGABRT error

在输出中使用这个:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] instantiated view controller with identifier "UIViewController-c2d-Su-6Id" from storyboard "Options", but didn't get a UITableView.'

我不知道为什么要使用底层函数 [UITableViewController loadView],因为我不希望我的 Options-view 是 TableView - 表在容器视图中。

我正在使用不同的故事板,并使用故事板参考来以模态方式呈现选项视图。我尝试删除按钮、segue 和 Storyboard 引用,用新的替换它们,并重命名我的 ViewController.swift 文件以及对它的所有引用,但没有成功

我也尝试在网站上寻找其他解决方案,但我没有运气,我开始担心这可能是因为 containerViews 中的 tableViews...

我对学习 swift 和 Xcode 还很陌生,所以请保持你的解释简单易懂,并假设我完全无能:-)

【问题讨论】:

  • 当您在情节提要中为选项屏幕制作场景时,您是拖出常规视图控制器还是表格视图控制器?更重要的是,选项视图控制器的身份是什么?您收到的消息看起来很像您在身份检查器的 Class 字段中仍然有 UITableViewController 的表格视图控制器。
  • 错误提示您有一个视图控制器,它是UITableViewController 或其子类,但该场景的根视图不是UITableView
  • 我的 Options ViewController 有 StoryboardID 'OptionViewWithTableViews' 并且没有 RestorationID。

标签: ios swift uitableview segue uicontainerview


【解决方案1】:

我猜你可能添加了一个容器视图,它会自动将一个“子”视图控制器放置到情节提要上,然后简单地将那个子 VC 的类更改为 UITableViewController --- 正如你发现的那样,不起作用。

要将表视图控制器用作子视图,请添加您的容器视图,然后将普通的UITableViewController 添加到情节提要中。然后,从 Container View Ctrl-Drag 到新的 table view controller 并从弹出菜单中选择Embed

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2013-12-29
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多