致命错误:在 UITableViewCell 中展开可选值错误时意外发现 nil?

Posted

技术标签:

【中文标题】致命错误:在 UITableViewCell 中展开可选值错误时意外发现 nil?【英文标题】:Fatal error: Unexpectedly found nil while unwrapping an Optional value error in UITableViewCell? 【发布时间】:2018-09-06 10:22:19 【问题描述】:

我正在使用故事板,我有自定义的 tableviewcell 类。我将插座从故事板拖到 tableviewcell。我正在为这样的组件添加角和颜色。但我收到此错误致命错误:在展开可选值时意外发现 nil。如何解决这个问题

我在 tableviewcell 类中的代码是。

import UIKit

class detailsTableViewCell: UITableViewCell 

@IBOutlet weak var chargesTableViewCellView: UIView!
@IBOutlet weak var typeLbl: UILabel!

override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code

    chargesTableViewCellView.layer.borderColor = UIColor(red: 0.10, green: 0.39, blue: 0.65, alpha: 1.0).cgColor // Here I'm getting error
    chargesTableViewCellView.layer.borderWidth = 2.0
    chargesTableViewCellView.layer.cornerRadius = 10.0

【问题讨论】:

您是否将chargesTableViewCellView 与它在故事书或xib 文件中的出口连接? 您是否将此类分配给故事板上的多个单元格? 是的,我连接正确,我重新检查了@Moayad Al kouz 是的,我在整个项目中对所有 tableview 单元格使用相同的类,@Jogendar Choudhary @ios 你可以尝试在borderColor之前设置borderWidth 【参考方案1】:

我认为您已经使用了不止一个具有单个自定义类的单元格,因此您需要添加带有重用标识符的检查:

override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code
   // "identifier" is a cell identifier so please change this identifier with your cell identifier witch is used this outlet
        if self.reuseIdentifier == "identifier" 
    chargesTableViewCellView.layer.borderColor = UIColor(red: 0.10, green: 0.39, blue: 0.65, alpha: 1.0).cgColor // Here I'm getting error
        

    chargesTableViewCellView.layer.borderColor = UIColor(red: 0.10, green: 0.39, blue: 0.65, alpha: 1.0).cgColor // Here I'm getting error
    chargesTableViewCellView.layer.borderWidth = 2.0
    chargesTableViewCellView.layer.cornerRadius = 10.0

您需要添加检查 reuseIdentifier 单元格包含此插座。这对你有用。

【讨论】:

是的,我对许多单元格使用单个类,而这些都来自不同的类。如果我在 cellForRowAt indexPath: 中编写代码:它工作正常。但是 cellForRowAt indexPath: 会调用多次。这就是我在自定义类中编写此代码的原因。 @iOS 是的,当您在 cellForRowAt indexPath 中正确时,这将起作用,但您需要在 awakeFromNib 中添加重用标识符。 @iOS 让我知道您在添加重用标识符检查后是否仍然遇到此问题 @iOS:您需要为所有网点添加检查 @iOS:你遇到了这个崩溃,因为 outlet 变为零,所以请检查每个 outlet 的重用标识符【参考方案2】:

你可以像这样为你的自定义视图创建一个类

import UIKit

class CornerView: UIView 

func setup() 

    self.layer.borderColor = UIColor(red: 0.10, green: 0.39, blue: 0.65, alpha: 1.0).cgColor
    self.layer.borderWidth = 2.0
    self.layer.cornerRadius = 10.0



override init(frame: CGRect) 
    super.init(frame: frame)
    setup()

required public init?(coder aDecoder: NSCoder) 
    super.init(coder: aDecoder)
    setup()

然后你可以从你的自定义类继承

@IBOutlet weak var chargesTableViewCellView: CornerView!

注意:确保故事板中的单元格标识符在 ViewController 中是相同的

【讨论】:

如何给这个chargesTableViewCellView分配颜色【参考方案3】:

转到 Interface Builder 并删除对文件的所有引用。选择故事板容器并单击界面生成器中最右侧的按钮。您将在其中找到参考列表。单击 (x) 为它们中的每一个。

之后重新连接。

如果您在情节提要中更改名称、复制粘贴或移动内容,有时引用会混淆。这一切在 Xcode 上看起来都不错,但是引用的 ids 不匹配。

【讨论】:

以上是关于致命错误:在 UITableViewCell 中展开可选值错误时意外发现 nil?的主要内容,如果未能解决你的问题,请参考以下文章

Swift UITableViewCell detailTextLabel.text 抛出错误“致命错误:无法打开 Optional.None”

reloadData() 致命错误:在展开可选值时意外发现 nil

致命错误:在展开可选值时意外发现 nil - 当 UITextField 被点击时

自定义UITableViewCell中的UITextField意外发现为零

无法在 Swift 中展开和折叠 TableViewCell

在uitableview swift4中展开和折叠多级部分