致命错误:在 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 上看起来都不错,但是引用的 id
s 不匹配。
【讨论】:
以上是关于致命错误:在 UITableViewCell 中展开可选值错误时意外发现 nil?的主要内容,如果未能解决你的问题,请参考以下文章
Swift UITableViewCell detailTextLabel.text 抛出错误“致命错误:无法打开 Optional.None”
reloadData() 致命错误:在展开可选值时意外发现 nil
致命错误:在展开可选值时意外发现 nil - 当 UITextField 被点击时
自定义UITableViewCell中的UITextField意外发现为零