我想在文本字段内编辑后更新子值。
目前我有这个动作:
@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]
}
当我运行断点时,它确实显示了项目的编辑值,但更新似乎没有执行。
答案 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)")