Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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中的子值_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 更新Firebase中的子值

Ios 更新Firebase中的子值,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我想在名为“用户”的子对象中更新名为“PhotoGallery”的子对象值 如何重写此代码以实现此目的 func registerDatabase(id: String, url: [String: AnyObject]) { //Create a database reference let userRef = self.databaseRef.child("users").childByAutoId().child(id) userRef.

我想在名为“用户”的子对象中更新名为“PhotoGallery”的子对象值

如何重写此代码以实现此目的

func registerDatabase(id: String, url: [String: AnyObject]) {

        //Create a database reference
        let userRef = self.databaseRef.child("users").childByAutoId().child(id)

        userRef.updateChildValues(["PhotoGallery":url]) {(error, ref) in

            if error != nil{
                print("Error registering Firebase database: \(error)")

                return
            }

            print("Successfully stored in DB")
        }
    }

    func removeSpecialCharsFromString(text: String) -> String {
        let validChars: Set<Character> = Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890".characters)

        return String(text.characters.filter{validChars.contains($0)})
    }
func注册表数据库(id:String,url:[String:AnyObject]){
//创建数据库引用
让userRef=self.databaseRef.child(“用户”).childByAutoId().child(id)
userRef.updateChildValue([“PhotoGallery”:url]){(错误,ref)位于
如果错误!=nil{
打印(“注册Firebase数据库时出错:\(错误)”)
返回
}
打印(“成功存储在数据库中”)
}
}
func从字符串(文本:字符串)->字符串中删除特殊字符{
让validChars:Set=Set(“abcdefghijklmnopqrstuvxyzabcdefghijklkmnopqrstuvxyz1234567890.”字符)
返回字符串(text.characters.filter{validChars.contains($0)})
}

由于您正在使用childByAutoId动态创建子节点,因此setValue将执行此操作

let userChildRef = self.databaseRef.child("users").childByAutoId()
let photoRef = userChildRef.child("id").child("PhotoGallery")
photoRef.setValue(url)
导致

users
   -Yuhusn9asijasd
      id
       PhotoGallery: "www.someurl.com"
注:我将photoRef作为一个单独的let保留,以使其更具可读性,因为userChildRef现在引用该用户的所有子级

let nameRef = userChildRef.child("name")
nameRef.setValue("Gilligan")

let hatColorRef = userChildRef.child("hat")
hatColorRef.setValue("White")

let shirtColorRef = userChildRef.child("shirt")
shirtColorRef.setValue("Red")


users
   -Yuhusn9asijasd
      id:
        PhotoGallery: "www.someurl.com"
      name: "Gilligan"
      hat: "White"
      shirt: "Red"

您的父节点是用户,它有一个由childByAutoId创建的子节点,该子节点有一个子id(一个字符串),然后该子节点有一个子PhotoGallery,该子PhotoGallery是一个值为字符串url的键。您不能通过childByAutoId()更新子节点的值。这将创建一个新的子项。然后如何更新当前用户的此特定子项???谢谢,但这不会更新当前用户的特定子项。它仅通过自动创建新的子对象id@CarstenHøvsgaard您问题中发布的代码使用childByAutoId,这意味着它不会出于任何原因更新特定用户的孩子。每次调用该函数时,它都会创建一个新的子节点,因此不会有任何要更新的内容,因为新的子节点是空的。