gpt4 book ai didi

ios - Firebase 数据库到 UITableView 单元问题

转载 作者:行者123 更新时间:2023-11-28 15:22:22 24 4
gpt4 key购买 nike

我正在创建一个应用程序,它使用 firebase 数据库在一个单元格中显示两个不同的子数据库。因此,由于我的第一个子数据库名为“Name”,它将是单元格的正文,而第二个子数据库“ImageURL”将是单元格的副标题文本。

我无法弄清楚为什么每当我尝试将第二个子数据库获取到 TableView 单元格时,它都不起作用。我要么遇到索引超出范围错误,要么根本不显示第二个子数据库。

这是我的代码:

变量:

@IBOutlet weak var myTextField: UITextField!
@IBOutlet weak var myNameField: UITextField!
@IBOutlet weak var myTableView: UITableView!

var ref: DatabaseReference!
var myNameList:[String] = []
var myList:[String] = []
var handle:DatabaseHandle!
var nameHandle: DatabaseHandle!

按下保存按钮时的按钮代码:

@IBAction func saveBtn(_ sender: Any) {

if myNameField.text != "" {
ref?.child("Name").childByAutoId().setValue(myNameField.text)
myNameField.text = ""

if myTextField.text != "" {
ref?.child("ImageURL").childByAutoId().setValue(myTextField.text)
myTextField.text = ""
}
}

}

TableView 函数 NumberOfRowsInSection 代码:

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

TableView 函数 CellForRowAtIndexPath 代码:

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
cell.textLabel?.text = myNameList[indexPath.row]
cell.detailTextLabel?.text = myList[indexPath.row]

ViewDidLoad代码:

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
ref = Database.database().reference()
handle = ref?.child("ImageURL").observe(.childAdded, with:{ (DataSnapshot) in
if let item = DataSnapshot.value as? String{
self.myList.append(item)
self.myTableView.reloadData()
}
})
nameHandle = ref?.child("Name").observe(.childAdded, with:{ (DataSnapshot) in
if let nameItem = DataSnapshot.value as? String{
self.myList.append(nameItem)
self.myTableView.reloadData()
}
})


}

我的主要 Storyboard:

enter image description here

最佳答案

我注意到有几件事可能会导致该问题。

cellForRowAt 函数中,您正在使用名为 myNameList 的数组填充 textLabel,并使用以下内容填充 detailTextLabel一个名为 myList 的数组。但是,当您在 viewDidLoad 中加载数据时,您会将这两个内容附加到 myList。可能是复制/粘贴错误,但我认为其中之一应该是 myNameList

此外,您的数据结构存在缺陷。在 cellForRowAtIndexPath 中,根据您为行编制索引的方式(使用 indexPath.row),您假设项目总是成对出现并且两个引用总是有相同数量的 child 。但是基于 saveBtn,我可以轻松地只输入 name 而不是 imageURL,它只会保存 name,整个数据库现在不匹配。我建议有一个名为 items 的子引用,其中每个子引用都有一个 name 和一个 imageURL

关于ios - Firebase 数据库到 UITableView 单元问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45784138/

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