将 UITbale 视图连接到 firebase 实时数据库时出现解包错误
Unwrapping error connecting UITbale view to firebase real time database
我想要一个 UITableview 来从 firebase 数据库中读取视频。
我已经连接到 firebase 数据库。如图所示设置我的数据库:
我设置了一个结构并 linked 并将视频 linked 到它。
该应用程序可以很好地读取数据库标题,但是当我点击 link 直接指向视频的单个单元格时,出现展开错误。
因此 table 视图填充了标题视频 1 和视频 2,但由于某些原因,这些单元格未将 link 读取到存储在 firebase 中的视频文件。
我设置的结构是:
viewcontroller.swift中的代码是:
导入 UIKit
导入 Firebase
导入 Firebase 数据库
导入 AVKit
导入 AVFoundation
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var table = [Videos]()
var ref: DatabaseReference!
@IBOutlet weak var Tableview: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference().child("videos")
ref.observe(DataEventType.value, with: {(snapshot) in
if snapshot.childrenCount > 0 {
self.table.removeAll()
for video in snapshot.children.allObjects as! [DataSnapshot] {
let Object = video.value as? [String: AnyObject]
let Title = Object?["Title"]
let videolink = Object?["link"]
let video = Videos(Title: Title as? String, link: video as? String)
self.table.append(video)
self.Tableview.reloadData()
}
}
})
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return table.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Tableview.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
let video: Videos
video = table[indexPath.row]
cell.titleLabel.text = video.Title
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let videoURL = URL(string: table[indexPath.row].link!) else {
return
}
let player = AVPlayer(url: videoURL)
let controller = AVPlayerViewController()
controller.player = player
present(controller, animated: true) {
player.play()
}
}
}
我仅有的另一件事是 TableViewCell.swift 文件:
这是一个相当简单的项目,但我不知何故被困住了。如果有人能看到我哪里出错了,那就太好了。
谢谢。
我认为问题出在这一行:
let video = Videos(Title: Title as? String, link: video as? String)
应该是:
let video = Videos(Title: Title as? String, link: videolink as? String)
希望对您有所帮助。
我想要一个 UITableview 来从 firebase 数据库中读取视频。 我已经连接到 firebase 数据库。如图所示设置我的数据库:
我设置了一个结构并 linked 并将视频 linked 到它。 该应用程序可以很好地读取数据库标题,但是当我点击 link 直接指向视频的单个单元格时,出现展开错误。
因此 table 视图填充了标题视频 1 和视频 2,但由于某些原因,这些单元格未将 link 读取到存储在 firebase 中的视频文件。
我设置的结构是:
viewcontroller.swift中的代码是:
导入 UIKit 导入 Firebase 导入 Firebase 数据库 导入 AVKit 导入 AVFoundation
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var table = [Videos]()
var ref: DatabaseReference!
@IBOutlet weak var Tableview: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference().child("videos")
ref.observe(DataEventType.value, with: {(snapshot) in
if snapshot.childrenCount > 0 {
self.table.removeAll()
for video in snapshot.children.allObjects as! [DataSnapshot] {
let Object = video.value as? [String: AnyObject]
let Title = Object?["Title"]
let videolink = Object?["link"]
let video = Videos(Title: Title as? String, link: video as? String)
self.table.append(video)
self.Tableview.reloadData()
}
}
})
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return table.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = Tableview.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
let video: Videos
video = table[indexPath.row]
cell.titleLabel.text = video.Title
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let videoURL = URL(string: table[indexPath.row].link!) else {
return
}
let player = AVPlayer(url: videoURL)
let controller = AVPlayerViewController()
controller.player = player
present(controller, animated: true) {
player.play()
}
}
}
我仅有的另一件事是 TableViewCell.swift 文件:
这是一个相当简单的项目,但我不知何故被困住了。如果有人能看到我哪里出错了,那就太好了。
谢谢。
我认为问题出在这一行:
let video = Videos(Title: Title as? String, link: video as? String)
应该是:
let video = Videos(Title: Title as? String, link: videolink as? String)
希望对您有所帮助。