swift - 如何从 firebase 读取数据,block with 不起作用?

标签 swift firebase firebase-realtime-database

我尝试从 firebase 读取数据。我制作了 observeSingleEvent,但阻止“with”不起作用,为什么?

我尝试调试,发现 block with 不起作用。 userID 有正确的 ID 并且引用也正确

    var ref: DatabaseReference!
    var snapData: NSDictionary?
    var nameString = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()

        ref = Database.database().reference()
        loadData()
        table.delegate = self
        table.dataSource = self
        table.register(UITableViewCell.self, forCellReuseIdentifier: "indentifire")
        view.addSubview(table)


        // Do any additional setup after loading the view.
    }

    // ---------------------------------------------------

    //loading data from FireBase
    func loadData() {
        let userID = Auth.auth().currentUser?.uid
        ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
            self.snapData = snapshot.value as? NSDictionary
        })
    }

    // delegate
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var temp = 0
        for (_,val) in snapData! {
            if val as? String == "false" {
                temp += 1
                nameString.append(val as! String)
            }
        }
        return temp
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = table.dequeueReusableCell(withIdentifier: "indentifire", for: indexPath)
        cell.textLabel!.text = nameString[indexPath.row]
        return cell
    }```

this is my database
![photo](https://imgur.com/a/0UzOPJ7

最佳答案

数据库操作异步进行。映射loadData中的数据并重新加载 TableView

func loadData() {
    let userID = Auth.auth().currentUser?.uid
    ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
        if let snapData = snapshot.value as? [String:Any] {
           self.nameString = snapData.values.compactMap {$0 as? String}
           DispatchQueue.main.async {
              self.table.reloadData()
           }
        }
    })
}

并且在 numberOfRowsInSection 中只返回 nameString 中的项目数

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

关于swift - 如何从 firebase 读取数据,block with 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55352389/

相关文章:

swift - 具有多个文本字段输入 View 的多个选择器 View Swift

firebase - 以原子方式更新多个节点并将值加 1

javascript - Firebase Web update() 删除所有其他子节点

Firebase REST API : How to fetch data by priority like startAt/endAt in JS?

java - 如何从firebase实时数据库获取数据

swift - 自动调整 UITableViewCell 内部 UITableView 的大小

ios - SwiftUI MVVM 协调器/路由器/导航链接

json - 使用 Swift 和 PromiseKit 链接 Alamofire 请求

firebase - Cloud Functions for Firebase 的安全 HTTP 触发器

swift - Firebase 注销然后切换 Storyboard