Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS Firebase-如何使用.childByAutoId()创建多节点位置更新_Ios_Swift_Firebase_Firebase Realtime Database_Uuid - Fatal编程技术网

iOS Firebase-如何使用.childByAutoId()创建多节点位置更新

iOS Firebase-如何使用.childByAutoId()创建多节点位置更新,ios,swift,firebase,firebase-realtime-database,uuid,Ios,Swift,Firebase,Firebase Realtime Database,Uuid,我使用iOS'UUID(),将数据发送到单个子位置。uuistring: let userPostsRef = db?.child("users")?.child(\(uid))?.child("posts")?.child(theUUID) // uuid is basically the postId userPostsRef.updateChildValues(userDict) 如果我想向多个节点发送数据,我必须以不同的方式构造节点子节点: let userPostsRef = "/u

我使用iOS'
UUID(),将数据发送到单个子位置。uuistring

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()
,因为没有一个ref开始

如何使用Firebase的
.childByAutoId()
创建多位置更新,并获取对它的引用而不是
UUID().uuiString

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非常相似,只是有一些特殊的属性(例如基于时间戳的属性),使得UUID作为数据库键更具吸引力

这意味着您可以调用
childByAutoId()
,只需将其中的密钥作为您的
postId

let postId = db.childByAutoId().key