Ios 来自Firebase数据库的TableViewCell数据
所以基本上我想从我的数据库中获取漏洞,并将它们放在tableView中,但我真的不知道怎么做。我想不出我是如何得到单元格来获得洞号的标题的 这是我的数据库: 这是我的viewcontroller:Ios 来自Firebase数据库的TableViewCell数据,ios,swift,uitableview,firebase,firebase-realtime-database,Ios,Swift,Uitableview,Firebase,Firebase Realtime Database,所以基本上我想从我的数据库中获取漏洞,并将它们放在tableView中,但我真的不知道怎么做。我想不出我是如何得到单元格来获得洞号的标题的 这是我的数据库: 这是我的viewcontroller: import UIKit import Firebase class HolesViewController: UITableViewController { //FirebaseRefrences var ref = FIRDatabaseReference.init()
import UIKit
import Firebase
class HolesViewController: UITableViewController {
//FirebaseRefrences
var ref = FIRDatabaseReference.init()
var holes: [FIRDataSnapshot]! = []
override func viewDidLoad() {
//ViewDidLoad
//Refrences to Firebase
ref = FIRDatabase.database().reference()
let CoursesRef = ref.child("Courses")
//snapshot
CoursesRef.observeEventType(.ChildAdded, withBlock: { snapshpt in
self.holes.append(snapshpt)
self.tableView.reloadData()
})
}
override func viewDidAppear(animated: Bool) {
//ViewDidAppear
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.holes.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell! = self.tableView.dequeueReusableCellWithIdentifier("HoleCell")
let holesSnap = self.holes[indexPath.row]
/*
??????
*/
return cell
}
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return true
}
}
正如我所看到的,你的
洞
数组实际上是一个当然是快照的数组
如果您想要一个包含所有球场所有洞的阵列,您需要使用以下工具
self.holes = snapshpt.childSnapshotForPath("Holes").children.allObjects as [FIRDataSnapshot]
如果你只想得到一个特殊球场的洞,你应该像这样检索你的数据
ref.child("Courses").child(courseId).child("Holes").observeEventType(.ChildAdded withBlock: { snapshot in
self.holes.append(snapshot)
}
有一次在孔[indexPath.row]
中有孔快照(每个孔一个快照),只需将单元格textlab
设置为快照值
cell.textLabel = holes[indexPath.row].value as! String
我会给你一些关于这个话题的信息,然后尽我所能说服你不要以这种方式做这件事 首先,鉴于以下结构:
courses
course_01
holes
1: hole 1
2: hole 2
3: hole 3
name: course name 1
course_02
holes
0: hole 0
1: hole 1
2: hole 2
name: course name 2
还有一些Firebase代码来读取数据
self.myRootRef.childByAppendingPath("courses/course_01")
thisCourseRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
let name = snapshot.value["name"] as! String
let holes = snapshot.value["holes"] as! NSArray
print(name)
print(holes)
})
首先要注意的是Firebase直接支持NSArray,因此您可以轻松地将这些洞直接读取到数组“洞”中
当为课程_01运行代码时,这些是结果
course name 1
(
"<null>",
"hole 1",
"hole 2",
"hole 3"
)
Firebase中的数组是从零开始的,因此在第一个示例中,它将NULL赋值给第0个元素。因此,孔1实际上需要是Firebase中数组中的第0个元素
话虽如此,让我们假设有一个特别的事件,全国7日。所以你想把洞#7的名字改成别的名字。。。说‘第七洞,在乎的洞’
使用Firebase阵列时,您必须读入并覆盖整个节点(“洞”节点,lol),因为您无法访问阵列中的单个元素
更好的选择是格式化Firebase结构,如下所示:
holes
-Y9989jaik9
name: hole 0
hole_num: 0
-Juiijaie898
name: hole 1
hole_num: 1
.
.
.
-Ykmi9mms9889
name: Hole 7, the hole that cares
hole_num: 7
真正酷的是,你可以在不编辑或更新其他洞的数据的情况下动态重命名洞
归根结底,Firebase阵列的性能非常随机应变,通常是可以避免的
希望这能有所帮助。天哪,谢谢你,太棒了……一切都正常,但不知怎的,我有一个空的顶部电池?@LB16很好!我刚刚做了一个更新,可能与此有关。如果没有,请花些时间调试孔阵列,看看是否有额外的快照。@LB16如果有任何进展或仍然有任何问题,请告诉我。:)
holes
-Y9989jaik9
name: hole 0
hole_num: 0
-Juiijaie898
name: hole 1
hole_num: 1
.
.
.
-Ykmi9mms9889
name: Hole 7, the hole that cares
hole_num: 7