使用FirebaseDatabase - Swift IOS中的循环保存多个数据

时间:2016-10-29 12:25:48

标签: ios swift loops firebase firebase-realtime-database

使用我的代码,我会保存多个数据,并在我的 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
                }
            })

        }

提前谢谢。

2 个答案:

答案 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)