• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何在表格 View 中添加 Firebase 值

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:45:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

对于如何将表格 View 与 Firebase 上的值连接起来,我自己有一个问题,或者更确切地说是一个误解。

我的信息:

我有一个 Firebase,许多其他文件夹之一称为“Flights”。在我的应用程序 View 中,我可以按照以下路径在此文件夹中添加一些信息:Flights > userId > autoId > 我感兴趣的值,包括日期和其他一些字符串

我的问题是:

如何在 tableView 中添加,当这个是由 viewDidLoad 创建时,我的文件夹中的每个 autoId 一个新的个性化单元格 Flights > userId ?

我的尝试:

我声明我的数组:

 var datas: [Flight] = []

我调用 viewDidLoad() 这个函数:

func loadFlights() {
    ref = Database.database().reference()
   let userID = Auth.auth().currentUser?.uid
    ref.child("flights").child(userID!).childByAutoId().queryOrderedByKey().observe(.childAdded, with: { (snapshot) in

        if let valueDictionary = snapshot.value as? [AnyHashable:String]
        {

            let date = valueDictionary["Date"]
            let type = valueDictionary["aircraft-model"]
            let registration = valueDictionary["aircraft-registration"]

            let totalTime = valueDictionary["TOTAL-TIME"]

            let depTime = valueDictionary["departure-time"]
            let depPlace = valueDictionary["departure-place"]

            let arrTime = valueDictionary["arrival-time"]
            let arrPlace = valueDictionary["arrival-place"]
            self.datas.append(Flight(from: date ?? "XX-XX-XX", type!, registration!, totalTime!, depTime!, depPlace ?? "NIL", arrTime!, arrPlace!))

            self.tableView.reloadData()
        }else{
            // nothing need to happens
        }
    })

}

最后我有我的表管理器部分:

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return datas.count
    //return newFlight.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // creer la cellule

    let cell = tableView.dequeueReusableCell(withIdentifier: "lbCells") as! LogBookCell

    cell.dateLabel.text = datas[indexPath.row].date
    cell.typeLabel.text = datas[indexPath.row].type
    cell.RegistrationLabel.text = datas[indexPath.row].regi

    cell.totalTimeLabel.text = datas[indexPath.row].totalTime

    cell.depTimeLabel.text = datas[indexPath.row].depTime
    cell.depPlaceLabel.text = datas[indexPath.row].depPlace

    cell.arrTimeLabel.text = datas[indexPath.row].arrTime
    cell.arrPlaceLabel.text = datas[indexPath.row].arrPlace

    return cell
}

override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete{
        datas.remove(at: indexPath.row)
        tableView.reloadData()
    }
}

我不明白为什么当我在我的应用程序上加载 tableView 页面时什么都没有出现...

感谢您的帮助!

Flyer-74



Best Answer-推荐答案


您可以在添加或删除时观察一个值。

var ref: DatabaseReference! = Database.database().reference()
     ref.child("devices").child(user!.uid).child("device_name").setValue("iPhone test")

let newRef = ref.child("rooms").childByAutoId()
newRef.child("name").setValue("Room test")                                   
                            ref.child("devicesrooms").child(newRef.key).child(user!.uid).setValue(true)

let ev = ref.child("devicesrooms").child(newRef.key)
    var deviceNames = [String: String]()
    var deviceHandles = [String: UInt]()

// Listen for added devices
ev.observe(.childAdded, with: { (snapshot) -> Void in
    // Retrieve device key
    let deviceKey = snapshot.key

    // Add observer on device
    var handle: UInt = 0

    handle = ref.child("devices").child(deviceKey).observe(.value, with: { (snapshot) in
        let value = snapshot.value as? NSDictionary
        let deviceName = value?["device_name"] as? String ?? ""

        // Update or Add deviceName and handle in your dictionary
        deviceNames[deviceKey] = deviceName
        deviceHandles[deviceKey] = handle
    })
})

// Listen for removed devices
ev.observe(.childRemoved, with: { (snapshot) -> Void in
    let deviceKey = snapshot.key

    // Remove deviceName from your dictionary
    deviceNames[deviceKey] = nil

    // Retrieve handle from your dictionary
    if let handle = deviceHandles[deviceKey] {
        // Remove observer on device
        ref.child("devices").child(deviceKey).removeObserverWithHandle(handle)
    }

    // Remove handle from your dictionary
    deviceHandles[deviceKey] = nil
})

关于ios - 如何在表格 View 中添加 Firebase 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53073198/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap