如何修复 IBOutlet 配置上的 nil 错误和调用 View Controller 时不显示 UI?

Posted

技术标签:

【中文标题】如何修复 IBOutlet 配置上的 nil 错误和调用 View Controller 时不显示 UI?【英文标题】:How to fix nil error on IBOutlet configuration and UI not showing when View Controller is called? 【发布时间】:2020-04-02 06:21:47 【问题描述】:

我在尝试以编程方式配置我的 IBOutlets 时遇到错误。每当我尝试设置我的 UI 时,我都会收到此错误:

致命错误:在隐式展开可选值时意外发现 nil

但是当我注释代码(setupKategori() 函数)时,我的 UI 变得像这样透明(您可以看到只有导航栏可见,XIB 文件中的所有项目都应该可见) :

这是我的代码:

设置界面功能

func setupKategori()  // the function that throws the error whenever I call it in viewDidLoad()
        kategoriLabel.font = .boldTitilliumWeb(ofSize: 18)
        kategoriLabel.textColor = .init(hex: "#333333")
        kategoriLabel.sizeToFit()

        kategoriDetailLabel.font = .boldTitilliumWeb(ofSize: 18)
        kategoriDetailLabel.textColor = .init(hex: "#222222")
        kategoriDetailLabel.sizeToFit()

        showKategoriButton.addTarget(self, action: #selector(showKategoriAction(_:)), for: .touchUpInside)
    

编辑:调用视图控制器

func routeToFilter() 
    //Analytics.logEvent("pw_list_filter", parameters: nil)
    let destinationVC = FilterPWVC()
    let nav = UINavigationController(rootViewController: destinationVC)
    present(nav, animated: true, completion: nil)
  

对于一些信息,我已经从 XIB 文件连接了 IBOutlets。而且我对 ios 编程真的很陌生,所以我对它的了解仍然有限。如果您需要更多信息,请随时询问,我会提供给您。任何帮助,将不胜感激。谢谢!

【问题讨论】:

您能否编辑您的问题以显示您实例化此视图控制器的代码? @TylerTheCompiler 完成 谢谢。你说你正在使用一个 xib 文件——文件的名称是什么?是FilterPWVC.xib,还是别的什么?如果它与您的视图控制器的类名不完全匹配,那么您需要在使用 FilterPWVC(nibName:bundle:) 初始化视图控制器时指定 nib 名称(请参阅文档 here)。 @TylerTheCompiler 我的 xib 文件名为 FilterPWView.xib 我相信。谢谢你的帮助!我会查的:) 没有问题!请编辑您的问题以包含您的 xib 文件的名称,以便该信息不会隐藏在此处的 cmets 中。谢谢! 【参考方案1】:

由于您尝试使用 init() 方法(该方法又使用 nil 参数调用 init(nibName:bundle:))来实例化您的视图控制器,那么如果您希望从 xib 文件中加载您的视图控制器,那么您的 xib 文件的文件名必须与视图控制器的类名相同。

因此,在您的情况下,它应该是:“FilterPWVC.xib”,而不是“FilterPWView.xib”。

或者,除了重命名 xib 并使用 init(),您还可以直接使用 init(nibName:bundle:) 指定 nib 名称,如下所示:

// I'm assuming the xib is in the main bundle, so I've passed `nil` 
// in for the bundle here
let destinationVC = FilterPWVC(nibName: "FilterPWView", bundle: nil)

【讨论】:

以上是关于如何修复 IBOutlet 配置上的 nil 错误和调用 View Controller 时不显示 UI?的主要内容,如果未能解决你的问题,请参考以下文章

IBOutlet nil 而一切看起来都很好

Swift - 带有 xib 文件的自定义视图,IBOutlet 为 nil

UIImageView 的 UIImage 为 nil

如何修复:“致命错误:在展开可选值 (lldb) 时意外发现 nil”

如何修复“线程 1:致命错误:在展开可选值时意外发现 nil”错误? [复制]

Nil 同时展开可选的 IBOutlet 值