2016-10-29 33 views
1

使用我的代码我会保存多个数据在我的环中Firebase数据库。我使用while循环来保存我的数据库中的一些字符串,但我的应用程序只保存最后一本书,我不知道如何解决这个问题。有任何想法吗?在FirebaseDatabase中使用循环保存多个数据 - Swift IOS

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 
       } 
      }) 

     } 

在此先感谢您。

回答

1

各下一本书在你的循环覆盖以前的书。为防止这种情况的最简单方法是setValue()一个更深一层调用树:虽然

while bookNumber < numberOfBooks { 

     let book = bookList[bookNumber] 

     refUsers.child(key).child("multipleBooksNumber/\(bookNumber)").setValue(book.book_key!) 

    } 

注意,火力地堡文档和博客不推荐使用这样的阵列来存储数据。无论是存储书籍自然项下:

refUsers.child(key).child("multipleBooksNumber/\(book.book_key!)").setValue(true) 

或将它们存储在所谓的推编号:

refUsers.child(key).child("multipleBooksNumber").childByAutoId().setValue(book.book_key!); 
+0

非常感谢:) – Carlo

0

也许问题是你将所有书籍保存到相同的路径,并且他们一直被重写,所以最后只保留最后一个。 您指定键一次

let key = refUsers.childByAutoId().key 

,然后将所有的值保存到路径

refUsers.child(key).child("multipleBooksNumber").setValue(values) 
+0

我要救一个按键内的这些结果。我认为问题出在循环中。 – Carlo