簡體   English   中英

iOS Firebase-如何使用.childByAutoId()創建多節點位置更新

[英]iOS Firebase -How to create multi node location update using .childByAutoId()

我使用iOS的UUID().uuidString將數據發送到單個子位置:

let userPostsRef = db?.child("users")?.child(\(uid))?.child("posts")?.child(theUUID) // uuid is basically the postId
userPostsRef.updateChildValues(userDict)

如果要將數據發送到多個節點,則必須以不同的方式構造節點子節點:

let userPostsRef = "/users/\(uid)/posts/\(postId)"
let postRef = "/posts/\(uid)/\(postId)"

使用第一種方法,我可以獲得對UUID的引用,並將uuid作為鍵/值對作為字典的一部分發送到任何節點。 但是以第二種方式進行.childByAutoId()因為沒有引用開始,所以我無法訪問.childByAutoId()

如何使用Firebase的.childByAutoId()創建多位置更新,並獲取對它的引用而不是UUID().uuidString

let postId = UUID().uuidString // instead of uuidString I want to use .childByAutoId instead
let db = Database.database().reference()
let uid = Auth.auth().currentUser?.uid

@IBAction fileprivate func postButtonTapped(_ sender: UIButton) {

     var userDict = [String:Any]()
     // instead of sending self.postId I want to send .childByAutoId
     userDict.updateValue(self.postId, forKey: "postId")
     userDict.updateValue(commentTextField.text! forKey: "comment")             

     var postDict = [String:Any]()
     postDict.updateValue(commentTextField.text! forKey: "comment")

    let userPostsRef = "/users/\(uid)/posts/\(postId)"
    let postRef = "/posts/\(uid)/\(postId)"

    let multiNodeDict = [String:Any]()
    multiNodeDict.updateValue(userDict, forKey: userPostsRef)
    multiNodeDict.updateValue(postDict, forKey: postRef)

    db.updateChildValues(multiNodeDict)
}

childByAutoId()方法是純客戶端操作。 它不會在數據庫中創建子節點,而只是基於統計上保證唯一的密鑰來生成唯一位置。 從這個意義上講,它與UUID非常相似,只是具有一些特殊的屬性(例如基於時間戳),這些屬性使它們作為數據庫密鑰更具吸引力。

這意味着您可以調用childByAutoId()並將其中的鍵用作您的postId

let postId = db.childByAutoId().key

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM