使用我的代码,我会保存多个数据,并在我的 Firebase数据库中添加一个循环。我使用 while循环在我的数据库中保存了一些字符串,但我的应用只保存了最后一本书,而且我不知道如何解决这个问题。有什么想法吗?
let refUsers = FIRDatabase.database().reference().child("Users").child("User" + tag_login).child(user_key).child("Books").child("Others")
let key = refUsers.childByAutoId().key
let multipleBooksValues = ["multipleBooks": "Yes", "read": "Yes"] as NSDictionary
refUsers.child(key).setValue(multipleBooksValues)
let refBooks = FIRDatabase.database().reference().child("Books").child("User's books").child(book_key)
var bookNumber = 0
let numberOfBooks = bookList.count
while bookNumber < numberOfBooks {
let book = bookList[bookNumber]
let values = ["book_key\(bookNumber)" : book.book_key!] as NSDictionary
refUsers.child(key).child("multipleBooksNumber").setValue(values)
refBooks.updateChildValues(["onGoingNegotiations" : "Yes", "other_user_key" : self.user_key, "other_tag_login": self.tag_login])
refUsers.child(key).child("multipleBooksNumber").observe(.value, with: { (snapshot) in
let numberChildren = Int(snapshot.childrenCount - 1)
if numberChildren == bookNumber{
bookNumber += 1
}
})
}
提前谢谢。
答案 0 :(得分:1)
循环中的每一本书都会覆盖上一本书。防止这种情况的最简单方法是在树中更深层地调用setValue()
:
while bookNumber < numberOfBooks {
let book = bookList[bookNumber]
refUsers.child(key).child("multipleBooksNumber/\(bookNumber)").setValue(book.book_key!)
}
请注意,Firebase文档和博客建议不要使用这样的数组来存储数据。将书籍存储在他们的自然键下:
refUsers.child(key).child("multipleBooksNumber/\(book.book_key!)").setValue(true)
或者将它们存储在所谓的推送ID下:
refUsers.child(key).child("multipleBooksNumber").childByAutoId().setValue(book.book_key!);
答案 1 :(得分:0)
也许问题是你将所有书籍保存到同一条路径并且它们一直在重写,所以最后只保存了最后一本书? 您只需指定一次密钥
let key = refUsers.childByAutoId().key
然后将所有值保存到路径
refUsers.child(key).child("multipleBooksNumber").setValue(values)