updateChildValues()不起作用,但setValue()起作用

时间:2019-02-16 21:25:31

标签: swift firebase firebase-realtime-database

我正在尝试实施扇出,这是问题所在:当我尝试在我的SELECT DISTINCT SITE, YEAR, QUARTER, SEATS, SF, HC FROM (SELECT DISTINCT site SITE, YEAR YEAR, quarter QUARTER, sum(SEATS) SEATS, sum(SF) SF FROM Headcount GROUP BY SITE, YEAR, QUARTER) A CROSS JOIN (SELECT DISTINCT sum(HC) HC FROM Headcount GROUP BY site, YEAR, quarter, HC) C 参考中updateChildValues时,它什么也没做。我希望它创建usersOrdersRef节点,并用我的user_orders创建子节点,并在其中放置一个值。

如果我改用userid,它可以正常工作,但是我需要添加值而不删除所有先前的数据。我在做什么错了?

代码:

setValues

4 个答案:

答案 0 :(得分:0)

我自己解决它,现在它像这样

let usersOrdersRef = Database.database().reference().child("users-orders").child(self.appUser.uid).child(item.date!) var primary = false if (item.precursor == "") { primary = true } usersOrdersRef.setValue(primary)

在这种情况下,setValue不会删除所有以前的数据,而只会添加新的

答案 1 :(得分:0)

您的问题:

//this does not work, but if i use "setValue" instead it will store data
    usersOrdersRef.updateChildValues([item.date : primary])

我发现自己处于同样的情况。

问题是密钥的数据类型。当我将键转换为字符串时,它开始起作用。

希望这对处于相同情况的人有所帮助。

答案 2 :(得分:0)

您只需要将可选的数据键投射到updateChildValues函数中即可。

更新的代码:

for item in orderArray {
    let childRef = ref.child(item.date!)

    //this works fine
    childRef.updateChildValues(item.convertToDictionary() as! [AnyHashable : Any]) { [unowned self] (error, reference) in
        if error != nil {
            print(String(describing: error?.localizedDescription))
        }

        let usersOrdersRef = Database.database().reference().child("users-orders").child(self.appUser.uid)
        var primary = false
        if (item.precursor == "") { primary = true }

        // this will work now, as we have explicity cast the key
        usersOrdersRef.updateChildValues([item.date! : primary])
    }
}

答案 3 :(得分:0)

我有同样的问题

如果我使用

  

let newHashTagRef = Api.HashTag.REF_HASHTAG.child(word.lowercased())                   newHashTagRef。 updateChildValues ([[newPostId:true])

=>不起作用

当我更换

  

let newHashTagRef = Api.HashTag.REF_HASHTAG.child(word.lowercased())                   newHashTagRef。 setValues ([[newPostId:true])

=>它可以工作,但是会删除所有以前的数据

解决方案

  

let newHashTagRef =   Api.HashTag.REF_HASHTAG.child(word.lowercased())。孩子(newPostId)                   newHashTagRef。 setValue(true)