Firebase 数据库 - 致命错误:在展开可选值时意外发现 nil
Posted
技术标签:
【中文标题】Firebase 数据库 - 致命错误:在展开可选值时意外发现 nil【英文标题】:Firebase Database - Fatal error: Unexpectedly found nil while unwrapping an Optional value 【发布时间】:2019-03-30 02:02:15 【问题描述】:我正在尝试使用来自 Firebase 数据库的信息在我的 UITableViewController 的自定义单元格中填充一个标签,但我一直遇到此错误:
“线程 1:致命错误:在展开可选值时意外发现 nil”
我确实看过这个链接:What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?
我不认为我在加载前访问了插座,我确实检查了我的 IBOutlet 连接是否正确。
class FeedCell: UITableViewCell
@IBOutlet weak var postText: UILabel!
class FeedTableViewController: UITableViewController
var postInfo = FeedCell()
override func viewDidLoad()
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
self.tableView.rowHeight = 100.0
// postText = UILabel()
//
var ref: DatabaseReference!
ref = Database.database().reference()
let cellRef = ref.child("post/body")
cellRef.observeSingleEvent(of: .value) (snapshot) in
if let body = snapshot.value as? String
self.postInfo.postText.text = body
print(body)
我希望使用正文“test firebase”更新标签,但我只是遇到了那个错误。是因为我在另一个类中定义了我的 IBOutlet,然后在我的 FeedTableVIewController 中引用了它吗?任何建议将不胜感激!
【问题讨论】:
首先你不应该直接访问 outlets,其次为数据创建一个模型,在 if 语句中用你从 firebase 获得的数据填充模型类型的数组,然后在cellForRowAtIndexPath
方法中你用数据配置单元格
【参考方案1】:
问题来了
var postInfo = FeedCell()
与
self.postInfo.postText.text = body <<< postText is nil
首先你不应该创建一个 cell 的实例变量,因为你当前的变量 postInfo
是用 FeedCell()
启动的,所以无论它是否连接,出口都是 nil
其次,您应该使用表委托和数据源方法来填充您的表
【讨论】:
以上是关于Firebase 数据库 - 致命错误:在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章