使用UpdateChildValue从Firebase进行编辑

时间:2017-04-23 23:59:53

标签: ios swift firebase firebase-realtime-database

我想在文本字段内编辑后更新子值。

目前我有这个动作:

@IBAction func updateAction(_ sender: Any) {

        guard let itemNameText = itemName.text, let itemDateText = itemDate.text else { return }

        guard itemNameText.characters.count > 0, itemDateText.characters.count > 0 else {

            print("Complete all fields")
            return
        }
        let uid = FIRAuth.auth()?.currentUser?.uid
        let key = item.ref!.key
        let itemList = Item(itemName: itemNameText, itemDate: itemDateText, uid: uid!)
        let editItemRef = databaseRef.child("/usersList/\(key)")
        editItemRef.updateChildValues(itemList.toAnyObject())
        print("edited")

    }

我正在关注this tutorial,但他似乎使用了用户名,因为我只有电子邮件或uid(userID)作为身份验证,我以为我会使用uid。

这是我班里的toAnyObject函数:

func toAnyObject() -> [String: AnyObject] {
    return ["itemName": itemName as AnyObject, "itemDate": itemDate as AnyObject, "userID": userID as AnyObject]
}

当我运行断点时,它确实显示了项目的编辑值,但更新似乎没有执行。

1 个答案:

答案 0 :(得分:1)

为了更加安全,请尝试从您的路径中删除前导斜杠:

databaseRef.child("usersList/\(key)")

...并尝试打印Firebase返回的Error,如果有的话:

editItemRef.updateChildValues(itemList.toAnyObject()) { 
    (error, _) in
    if let error = error { 
        print("ERROR: \(error)")
    } else {
        print("SUCCESS")
    }

修改即可。我们发现他使用的是错误的数据库路径。正确的是:

databaseRef.child("users").child(uid!).child("usersList/‌​\(key)")