2016-10-29 3 views
1

내 코드로 루프가있는 여러 데이터 저장 Firebase 데이터베이스에 루프가있는 데이터가 여러 개 저장됩니다. 루프를 사용하는 동안 내 데이터베이스에 일부 문자열을 저장하지만 내 앱은 마지막 책만 저장하며이 문제를 해결하는 방법을 모르겠습니다. 어떤 아이디어?FirebaseDase - 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) 

또는 소위 푸시 ID를 아래에 보관 : 어느 자연 키의 책을 저장할

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