【问题标题】:How to save Firebase key for Swift in TableViewcell如何在 TableViewcell 中为 Swift 保存 Firebase 密钥
【发布时间】:2017-05-15 04:24:37
【问题描述】:

我是初学者。主要功能是当用户单击单元格的每个按钮时,它将更新数据。但是我只是写了一个新数据,它不能更新现有数据。 ViewController.swift

此函数写入一个新密钥而不是保存现有密钥。我该如何解决?

let  databaseRef = FIRDatabase.database().reference()
    databaseRef.child("location").queryOrderedByKey().observe(.childAdded, with: {snapshot in
        guard let firebaseResponse = snapshot.value as? [String:Any] else
        {
            print("Snapshot is nil hence no data returned")
            return
        }



        let status = firebaseResponse["status"] as! Int

        let key = databaseRef.childByAutoId().key

        let up = ["id":key,
                  "status":status] as [String : Any]
        databaseRef.child("location").child(key).setValue(up)

        self.posts.insert(postStruct(status:status,key:key), at: 0)

        self.tableView.reloadData()


    })

这是我在 google drive 中的练习 xcode

https://drive.google.com/open?id=0B2jj6V1tOGcVTm9JSy1uNV9fZnM

这是图片的 Firebase 数据:

【问题讨论】:

  • 当您在 tableCell 中显示数据时,您是否将该 autoId 与您的状态数据一起存储?显示您从 Firebase 检索数据的位置
  • 如果不使用autoId,如何使用key更新?
  • 该 autoId 是您的密钥,因此您需要使用它来更新您的状态值
  • 我说的是这个childByAutoId(),它会创建新的autoId,比如KHGx7IADzSquz7I8u,你现在得到了吗?
  • let key = databaseRef.childByAutoId().key let up = ["id":key] databaseRef.child("location").child(key).setValue(up)我使用这个函数它会写新的密钥而不是存储密钥的现有数据

标签: ios swift xcode firebase firebase-realtime-database


【解决方案1】:

问题出在这一行

let key = databaseRef.childByAutoId().key

您正在创建新的 autoID,而不是使用来自 snapshot.key 的当前子 autoId,因此将该行更改为以下一行,然后您就可以开始了。

let key = snapshot.key

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多