gpt4 book ai didi

swift - 在 UITableView 中显示 Firebase 数据

转载 作者:行者123 更新时间:2023-11-30 10:39:31 24 4
gpt4 key购买 nike

我对 Swift 语言非常陌生。我只是想提取我在 Firebase 中收集的企业名称并将其显示在我的 UITableView 上

我尝试过进行一些更改。首先,我检查并更改了 Firebase 权限,以便允许读取。作为 swift 的新手,我尝试使用 Firebase CocoaPods 附带的不同功能。

A link to a sample of my Firebase setup

class businessTableViewController: UITableViewController {

var name = [String]()

var ref: DatabaseReference!,
business = [eventStruct]()

struct eventStruct{
let sName: String!
}


override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
loadBusinesses()
}


override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}


func loadBusinesses(){
ref = Database.database().reference()
ref.child("name").queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
if let valueDictionary = snapshot.value as? [AnyHashable:String]{
let name = valueDictionary["name"]
self.business.insert(eventStruct(sName: name) , at: 0)


}
})

}


// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}


override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return business.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "businessCell", for: indexPath)

let label1 = cell.viewWithTag(1) as! UILabel
label1.text = business[indexPath.row].sName

return cell
}

最佳答案

编辑:此答案无法解决您的问题,请参阅评论。

首先,当 View Controller 消失时,您应该删除观察者,因此您应该保留对监听器的引用:

class businessTableViewController: UITableViewController {
var ref: DatabaseReference!
var handle: DatabaseHandle!

func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
}

func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadBusinesses()
}

func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if let handle = handle {
ref.removeObserverWithHandle(handle)
}
}

看看this post on where to initialize and remove references and listeners .

你的valueDictionary应该看起来像:

   [
0: ["address": "...", ...],
1: [...],
...,
]

但是您只是在执行不存在的 valueDictionary["name"] 。如果您需要在服务器中的值更新时获取更新,您可能需要使用 .value 而不是 .childAdded。另外,请在更新之前删除 business 中所有先前的值。你应该:

    func loadBusinesses() {
handle = ref.child("name").queryOrderedByKey().observe(.value) { (snapshot) in
guard let valueDictionary = snapshot.value as? [String: Any] else { return }
self.business.removeAll()
for (index, value) in valueDictionary.enumerated() {
if let name = (value as? [String: String])?["name"] {
self.business.insert(eventStruct(sName: name), at: 0)
}
}
}
}

注意:可能有错别字。

关于swift - 在 UITableView 中显示 Firebase 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57170122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com