【问题标题】:UIViewControllerRepresentable runtime error: Nib is loaded but view outlet wasn't set. Why?UIViewControllerRepresentable 运行时错误:已加载 Nib 但未设置视图出口。为什么?
【发布时间】:2020-06-07 11:44:18
【问题描述】:

我正在玩弄 SwiftUI 通过 UIViewControllerRepresentable 协议对 UIViewController 的访问;使用 Nib 与手动实例化类。

我见过的大多数演示示例都在代码中实例化了 ViewController。如下图:

struct RicViewVC: UIViewControllerRepresentable {
    // Parameters ----------------------------
    // let url: URL
    @Binding var showingVC: Bool
    // ---------------------------------------

    // 1)
    func makeUIViewController(context _: Context) -> RicViewController {
        let viewController = RicViewController()
        Bundle.main.loadNibNamed("RicView", owner: viewController, options: nil)
        return viewController
    }

    // 2)
    func updateUIViewController(_: RicViewController, context _: Context) {}

    // 3
    func makeCoordinator() -> RicViewVC.Coordinator {
        Coordinator(showing: $showingVC)
    }

    class Coordinator: NSObject {
        @Binding var showingCoord: Bool

        init(showing: Binding<Bool>) {
            _showingCoord = showing
        }
    }
}

但是,当 UIViewController 与 IB 链接时,这不起作用:

来自 RicViewController 的您好 2020-02-23 10:53:55.893551-0800

SafariRepresentable[9792:151550] *** 由于未捕获而终止应用程序 异常“NSInternalInconsistencyException”,原因: '-[UIViewController _loadViewFromNibNamed:bundle:] 加载了 “RicView”笔尖,但未设置视图出口。'

这就是我感到困惑的地方。
如何将 IB 的实例化 XIB 链接到 #1(参见上面的代码):makeUIViewController()?
语法是什么?

【问题讨论】:

    标签: ios swiftui


    【解决方案1】:

    如果您的RicViewController 是 XIB 所有者,请尝试以下操作

    let viewController = RicViewController(nibName: "_nib_name_here", bundle: nil) // if bundle not main the specify also bundle
    return viewController
    

    【讨论】:

    • 我根据您的建议进行了更改。但我仍然收到错误消息。如何设置视图出口? ...作为视图已经是 VC 不可或缺的一部分,应该已经可以访问了。
    • @FrederickC.Lee,所有网点都必须在所有者加载时自动链接。请尝试更新的变体。
    • 我按参考尝试了同样的问题。我有一个例外,该视图被引用两次(2x)。但是后来我将 File's Owner 视图的引用 -> 视图更改为 File's Owner 的视图 -> ViewController 并且它可以工作。
    • @FrederickC.Lee,这是我回答的第一行,因为我没有看到你的 xib,控制器必须是 xib 所有者。
    • ...我的评论有误,但 5 分钟过去了,我无法编辑它。事实证明我需要链接我的 UILabel (视图);不是实际的 UIViewController。
    【解决方案2】:

    在我的 UIViewController 的视图中有一个单独的 UILabel 未被引用。 在尝试/错误并参考 StackOverFlow 上的类似问题后,我发现我必须:
    1) 将文件的所有者设置为“RicViewController”;和
    2) 在 VC-View 的一个 UILabel 与 File's Owner Connection Inspector 的“视图”之间设置一个链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 2012-06-09
      • 2018-09-03
      • 2014-11-22
      相关资源
      最近更新 更多