Swift Firebase:如何在';已使用childbyAutoID创建了

Swift Firebase:如何在';已使用childbyAutoID创建了,swift,xcode,firebase,firebase-realtime-database,Swift,Xcode,Firebase,Firebase Realtime Database,我的应用程序中的用户有时需要更新某些内容的状态。现在你可以从两件事中选择一件:所谓的“滚轴银行”仍然存在或者“滚轴银行”被移除。用户可以创建一个数据引用。该id将由childbyAutoID创建。现在,我的问题是如何获得正确的子项并使用值更新一些子项。我的帖子: class Post { let ref: DatabaseReference! var TypeControle: String = "" var Stad: String = "" var Tijd:

我的应用程序中的用户有时需要更新某些内容的状态。现在你可以从两件事中选择一件:所谓的“滚轴银行”仍然存在或者“滚轴银行”被移除。用户可以创建一个数据引用。该id将由childbyAutoID创建。现在,我的问题是如何获得正确的子项并使用值更新一些子项。我的帖子:

class Post {
    let ref: DatabaseReference!
    var TypeControle: String = ""
    var Stad: String = ""
    var Tijd: String = ""
    var TijdControle: String = ""
    var TijdControleniet: String = ""
    var Latitude: String = ""
    var Longitude: String = ""
    var Extrainformatie: String = ""
    var Staater: String = ""
    var Staaternietmeer: String = ""

    init(TypeControle: String) {
        self.TypeControle = TypeControle
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }
    init(Stad: String){
        self.Stad = Stad
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }
    init(Tijd: String) {
        self.Tijd = Tijd
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }
    init(Latitude: String) {
        self.Latitude = Latitude
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }
    init(Longitude: String) {
        self.Longitude = Longitude
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }
    init(Extrainformatie: String) {
        self.Extrainformatie = Extrainformatie
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }
    init(Staater: String) {
        self.Staater = Staater
        ref = Database.database().reference().child("Rollerbanken").child("Controletest").childByAutoId()
    }
    init(Staaternietmeer: String) {
        self.Staaternietmeer = Staaternietmeer
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }
    init(TijdControle: String) {
        self.TijdControle = TijdControle
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }
    init(TijdControleniet: String) {
        self.TijdControleniet = TijdControleniet
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }

    init() {
        ref = Database.database().reference().child("Rollerbanken").childByAutoId()
    }

    init(snapshot: DataSnapshot)
    {
        ref = snapshot.ref
        if let value = snapshot.value as? [String : Any] {
            TypeControle = value["TypeControle"] as! String
            Stad = value["Stad"] as! String
            Tijd = value["Tijd"] as! String
            Latitude = value["Latitude"] as! String
            Longitude = value["Longitude"] as! String
            Extrainformatie = value["Extrainformatie"] as! String
            Staater = value["Staater"] as! String
            Staaternietmeer = value["Staaternietmeer"] as! String
            TijdControle = value["TijdControle"] as! String
            TijdControleniet = value["TijdControleniet"] as! String

        }
    }

    func save() {
        ref.setValue(toDictionary())
    }

    func toDictionary() -> [String : Any]
    {
        return [
            "TypeControle" : TypeControle,
            "Stad" : Stad,
            "Tijd" : Tijd,
            "Latitude" : Latitude,
            "Longitude" : Longitude,
            "Extrainformatie" : Extrainformatie,
            "Staater" : Staater,
            "Staaternietmeer" : Staaternietmeer,
            "TijdControle" : TijdControle,
            "TijdControleniet" : TijdControleniet

        ]
    }
}
TableViewCell的数据:

class ControleTableViewCell: UITableViewCell {
    @IBOutlet weak var storyControle: UILabel!
    @IBOutlet weak var storyTijd: UILabel!

    var post: Post! {
        didSet {
            storyControle.text = "\(post.Staaternietmeer)"
            storyTijd.text = "\(post.TijdControleniet)"
            storyControle.text = "\(post.Staater)"
            storyTijd.text = "\(post.TijdControle)"

        }
    }
“我的更新”按钮的外观:

 @IBAction func Update(_ sender: Any) {
        let alertController1 = UIAlertController(title: "Update melden" , message: "De rollerbank", preferredStyle: .alert)

        // Create the actions
        let RollerbankAction1 = UIAlertAction(title: "Staat er nog steeds", style: UIAlertActionStyle.default) {
            UIAlertAction in
            NSLog("Ja Pressed")

            self.newStory.Staater = self.Staater
            self.newStory.TijdControle = self.TijdControle
            self.newStory.save()
        }


        let cancelAction1 = UIAlertAction(title: "Staat er niet meer", style: UIAlertActionStyle.cancel) {
            UIAlertAction in
            NSLog("Cancel Pressed")

            let date = Date()
            let calendar = Calendar.current
            let hour = calendar.component(.hour, from: date)
            let minutes = calendar.component(.minute, from: date)
            let Tijd = "\(hour) : \(minutes)"

            self.newStory.Staaternietmeer = self.Staaternietmeer
            self.newStory.TijdControleniet = Tijd
            self.newStory.save()


    }

        alertController1.addAction(RollerbankAction1)
        alertController1.addAction(cancelAction1)
        self.present(alertController1, animated: true, completion: nil)
    }
这就是我使用的结构。如果我运行所有这些代码,新数据将进入另一个childbyAutoID,这不是我想要的。它只需要在名为“StaterNietMeer”和“TijdControleniet”的cleare空间中更新/setvalue。有人能帮我吗?

然后,您需要将推送ID存储在某个位置,以便以后可以重用它

要生成唯一的推送ID,请使用:

Database.database().reference().childByAutoId()
Database.database().reference().observe(.childAdded, with: { (snapshot) in

    // Here you get the Push ID back :

    let postKey = snapshot.key

    // And others things that you need :

    guard let author = snapshot.childSnapshot(forPath: "author").value as? String else { return }
    guard let content = snapshot.childSnapshot(forPath: "content").value as? String else { return }

    // Here you store your object (Post for example) in an array, and as you can see you initialize your object using the data you got from the snapshot, including the Push ID (`postKey`) :

    posts.append(Post(id: postKey, content: content, author: author))

})
并将其存储在某个地方:

let postKey = Database.database().reference().childByAutoId().key
然后,假设您需要一个方法来共享一篇文章,例如,您希望将此文章添加到多个节点,这就是它的外观:

func sharePost(_ postContent: String, completion: @escaping (Bool) -> ()) {

    guard let currentUserId = Auth.auth().currentUser?.uid else {
        completion(false)
        return
    }

    let postKey = Database.database().reference().childByAutoId().key

    let postData: [String: Any] = [ "content": "blabla",
                                    "author": currentUserId ]

    let childUpdates: [String: Any] = ["users/\(currentUserId)/posts/\(postKey)": true,
                                       "posts/\(postKey)": postData ]

    Database.database().reference().updateChildValues(childUpdates, withCompletionBlock: { (error, ref) in

        guard error == nil else {
            completion(false)
            return
        }

        completion(true)
    })

}
现在,要稍后访问唯一推送ID,您可以使用:

Database.database().reference().childByAutoId()
Database.database().reference().observe(.childAdded, with: { (snapshot) in

    // Here you get the Push ID back :

    let postKey = snapshot.key

    // And others things that you need :

    guard let author = snapshot.childSnapshot(forPath: "author").value as? String else { return }
    guard let content = snapshot.childSnapshot(forPath: "content").value as? String else { return }

    // Here you store your object (Post for example) in an array, and as you can see you initialize your object using the data you got from the snapshot, including the Push ID (`postKey`) :

    posts.append(Post(id: postKey, content: content, author: author))

})

然后,您需要将推送ID存储在某个位置,以便以后可以重用它

要生成唯一的推送ID,请使用:

Database.database().reference().childByAutoId()
Database.database().reference().observe(.childAdded, with: { (snapshot) in

    // Here you get the Push ID back :

    let postKey = snapshot.key

    // And others things that you need :

    guard let author = snapshot.childSnapshot(forPath: "author").value as? String else { return }
    guard let content = snapshot.childSnapshot(forPath: "content").value as? String else { return }

    // Here you store your object (Post for example) in an array, and as you can see you initialize your object using the data you got from the snapshot, including the Push ID (`postKey`) :

    posts.append(Post(id: postKey, content: content, author: author))

})
并将其存储在某个地方:

let postKey = Database.database().reference().childByAutoId().key
然后,假设您需要一个方法来共享一篇文章,例如,您希望将此文章添加到多个节点,这就是它的外观:

func sharePost(_ postContent: String, completion: @escaping (Bool) -> ()) {

    guard let currentUserId = Auth.auth().currentUser?.uid else {
        completion(false)
        return
    }

    let postKey = Database.database().reference().childByAutoId().key

    let postData: [String: Any] = [ "content": "blabla",
                                    "author": currentUserId ]

    let childUpdates: [String: Any] = ["users/\(currentUserId)/posts/\(postKey)": true,
                                       "posts/\(postKey)": postData ]

    Database.database().reference().updateChildValues(childUpdates, withCompletionBlock: { (error, ref) in

        guard error == nil else {
            completion(false)
            return
        }

        completion(true)
    })

}
现在,要稍后访问唯一推送ID,您可以使用:

Database.database().reference().childByAutoId()
Database.database().reference().observe(.childAdded, with: { (snapshot) in

    // Here you get the Push ID back :

    let postKey = snapshot.key

    // And others things that you need :

    guard let author = snapshot.childSnapshot(forPath: "author").value as? String else { return }
    guard let content = snapshot.childSnapshot(forPath: "content").value as? String else { return }

    // Here you store your object (Post for example) in an array, and as you can see you initialize your object using the data you got from the snapshot, including the Push ID (`postKey`) :

    posts.append(Post(id: postKey, content: content, author: author))

})

您需要将您的孩子的名字存储在某个地方,以便以后可以访问它来更新您的数据谢谢您的提示。但是,你如何存储这些信息并在事后进行更新呢?你需要将你的孩子的名字存储在某个地方,以便以后可以访问它来更新你的数据谢谢你的提示。但是,你如何存储这些信息并在事后进行更新呢?