Xcode 9 - Swift 4
没有在Firebase数据上设置权限 - 读/写所有人
我将json数据导入firebase,我的数据看起来像这样..
我正在尝试查看FireBase数据库中列出的作业的标题,将标题列表放在一个数组中并放入tableView中它不会返回任何内容 我的快速代码看起来像这样..
import UIKit
import FirebaseDatabase
class PostViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var jobPostsTableView: UITableView!
var ref: DatabaseReference?
var databaseHandle: DatabaseHandle = 0
var searchJSONQuery : String = ""
var jobsData = [String]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
jobPostsTableView.delegate = self
jobPostsTableView.dataSource = self
//Set the Firebase Reference
ref = Database.database().reference()
// Retreive the posts and listen for changes
databaseHandle = (ref?.child("positions/title").observe(.childAdded, with: { (snapshot) in
//Code to execute when a child is added under "positions"
//Take the value from the snapshot and add it to the jobsData array
let list = snapshot.value as? String
if let actualList = list {
self.jobsData.append(actualList)
self.jobPostsTableView.reloadData()
}
}))!
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return jobsData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell")
cell?.textLabel?.text = jobsData[indexPath.row]
return cell!
}
}
答案 0 :(得分:2)
使用child()
时,您只能在树下一层。由于您有很多职位,因此无法使用child("title")
简单地访问这些职位。
调用observeSingleEvent时,您正在寻找您在数据库引用中声明的密钥的值。
通过下面的方式,您可以获得“位置”键下方所有值的快照。因此,您使用for循环访问每个对象的“title”值。
您应该将其作为单独的函数编写,并从viewDidLoad()调用它,而不是在viewDidLoad本身内写入firebase代码。
func retrieveJobTitles(){
let positionRef = ref.child("positions")
positionsRef.observeSingleEvent(of: .value, with: { (snapshot) in
// Iterate through all of your positions
for child in snapshot.children.allObjects as! [DataSnapshot] {
let position = child as! DataSnapshot
let positionsInfo = position.value as! [String: Any]
let jobTitle = positionsInfo["title"] as! String
if jobTitle != nil {
self.jobsData.append(jobTitle)
}
}
self.jobPostsTableView.reloadData()
})
}
}