Ios 如何在firebase中的节点中添加子节点

Ios 如何在firebase中的节点中添加子节点,ios,swift,xcode,Ios,Swift,Xcode,我试图在firebase中同时上传多个图像。我有一个缩略图和三个其他主图像要同时上传,虽然我能够在firebase存储中成功上传它们,但我发现在数据库中引用图像路径很烦人 要上载图像: 1.)我正在执行上载任务,以便将一个缩略图图像与其他数据放在一起。这是上载缩略图后数据库的外观: 2.)然后我运行for循环将其他三个图像上载到数据库,这些图像将上载到存储器中。但是在数据库中,在unique key节点下,我没有得到包含我上传到存储器中的所有三个图像URL的子节点 这就是我希望数据库的外观:

我试图在firebase中同时上传多个图像。我有一个缩略图和三个其他主图像要同时上传,虽然我能够在firebase存储中成功上传它们,但我发现在数据库中引用图像路径很烦人

要上载图像:
1.)我正在执行上载任务,以便将一个缩略图图像与其他数据放在一起。这是上载缩略图后数据库的外观:

2.)然后我运行for循环将其他三个图像上载到数据库,这些图像将上载到存储器中。但是在数据库中,在unique key节点下,我没有得到包含我上传到存储器中的所有三个图像URL的子节点

这就是我希望数据库的外观:

我上传图像的代码:

    let uid = Auth.auth().currentUser?.uid
    let ref = Database.database().reference()
    let storage = Storage.storage().reference(forURL: "gs://myProject-3j45.appspot.com")

    let key = ref.child("posts").childByAutoId().key
    let imgRef = storage.child("posts").child(uid!).child("\(key).jpeg")


    let data = UIImageJPEGRepresentation(coverImageData!, 0.8)
    let uploadTask = imgRef.putData(data!, metadata: nil) { (metadata, Error) in
        if Error != nil {
            print(Error?.localizedDescription as Any)
            return
        }
        imgRef.downloadURL { (url, err) in
            if let url = url {
                let feed = ["pathToImage" : url.absoluteString ,
                            "likes" : 0 ,
                            "creator" : Auth.auth().currentUser?.displayName as Any,
                            "description" : describeData ,
                            "content" : contentData ,
                    ] as [String : Any]
                let postFeed = ["\(key)" : feed]
                ref.child("posts").updateChildValues(postFeed)
                self.dismiss(animated: true, completion: nil)
            }
        }
    }
    uploadTask.resume()
    print(imageUploaded)


    for _ in images {
        if imageUploaded != imageToUpload {

            // for multiple images upload process 
            let mainKey = ref.child(key).childByAutoId().childByAutoId().key
            let mainImageRef = storage.child("posts").child(uid!).child("\(mainKey).jpeg")

            let mainData = UIImageJPEGRepresentation(images.first!, 0.7)
            let mainUploadTask = mainImageRef.putData(mainData!, metadata: nil) { (metadata, Error) in
                if Error != nil {
                    print(Error?.localizedDescription as Any)
                    return
                }
                mainImageRef.downloadURL { (mainUrl, err) in
                    if let url = mainUrl {
                        let feeder = ["url" : url.absoluteString ] as [String : Any]
                        let mainImgUrls = ["\(key)" : feeder]
                        ref.child("posts").updateChildValues(mainImgUrls)
                        self.dismiss(animated: true, completion: nil)
                    }
                }
            }
            mainUploadTask.resume()
            imageUploaded += 1
            images.removeFirst()
            print(imageUploaded)
        } else if imageUploaded == imageToUpload {
            print(imageUploaded)
            return
        }

你试着换一条线

ref.child("posts").updateChildValues(mainImgUrls)
为此

ref.child("posts/mainImages/url_1").setValue(url.absoluteString)

你有一个周期,你应该每次更改url_1来保存新的url,所以我有点傻,但是当我把你的代码放到一个文件中并且导入Firebase时,我得到了这些未解析的标识符的存储、coverImageData、imageUploaded和图像。这是你所有的密码吗?@Sam是的!我试着针对具体的问题,所以省略了问题中的那些。好吧,如果没有问题,你能把你的项目上传到github吗?我可以看一下吗?它创建了一个子“mainImages”,但删除了所有其他值。数据库现在包含post->main image->url\u 1,并且缩略图现在没有上传到存储端