2016-12-16 3 views
1

코딩에 익숙하지 않고 Firebase를 사용하기 시작했으며 기본적으로 "토너먼트"와 "데일리 게임"의 두 노드를 만들려고하는 아래의 기능을 실행하고 있습니다 (존재하지 않는 경우).파이어베이스가 삭제 된 데이터를 잘못 보여줍니다/Swift 3/Xcode 8.2

-London 
    -City Game 
     -Date(stringDate) // getting this from another function, returns 2016-16-12 
      -Tournaments 
      -Daily Games 

을 그리고 코드는 다음과 같습니다 :

데이터베이스 나무는 다음과 같이한다

 func createTournamentsAndNonTournamentsNodes() { 

     let databaseRef = FIRDatabase.database().reference() 
     self.getLiveTimestamp() // this calls a function that returns timestamp 


     databaseRef.child("London/City Game/\(stringDate)").observeSingleEvent(of: .value, with: { (snapshot) in 

      if snapshot.hasChild("Daily Games") { 
       print ("Daily Games node exists already") 
      print(snapshot.key) 
      print(snapshot.value as Any) 
      } else { 
       print ("Daily Games dont exist, creating it now") 
       let postTwo : [String : AnyObject] = [("Daily Games") : "Initiated today at : \(self.timeStampString)" as AnyObject] 

       databaseRef.child("London/City Game/\(stringDate)").child("Daily Games").updateChildValues(postTwo) 
      } 
      if snapshot.hasChild("Tournaments") { 
       print ("Tournaments node exists already") 
      print(snapshot.key) 
      print(snapshot.value as Any) 
      } else { 
       print ("Tournaments dont exist, creating it now") 
       let postOne : [String : AnyObject] = [("Tournaments") : "Initiated today at : \(self.timeStampString)" as AnyObject] 
       databaseRef.child("London/City Game/\(stringDate)").child("Tournaments").updateChildValues(postOne) 
      } 
     }) 
    } 

그래서 빈 데이터베이스에 위의 실행의 결과는 그 콘솔 인쇄 " 데일리 게임 노드가 이미 있습니다 "와"토너먼트 노드가 이미 존재합니다 "라고 표시되며 키와 값은 아래와 같습니다. 그러나 문제는 1 시간 전에 이전에 실행 한 결과 나 자신에 의해 생성되었으며 코드를 다시 테스트하기 위해 Firebase 웹 콘솔에서 수동으로 수동으로 삭제하여 코드를 다시 실행하기 전에 데이터베이스가 완전히 비어 있음을 나타냅니다. 따라서 Firebase 콘솔을 다시로드하면 빈 데이터베이스가 표시되지만 데이터베이스에 데이터가있는 것처럼 내 코드에서이를 인쇄합니다. 이것이 어떻게 가능한지? Firebase는 웹 콘솔에서 비어있는 것처럼 보이지만 잠시 동안 데이터를 유지합니까?

Optional({ 

    "Daily Games" = "Initiated today at : 13:01:19"; 
    Tournaments =  { 
     Tournaments = "Initiated today at : 13:05:22"; 
    }; 
}) 

내가 뭘 잘못하고 있니? 코드에서 데이터베이스가 채워진 것을 보여 주지만 웹 콘솔에서 비어있는 데이터베이스를 표시하는 경우 실제로 데이터베이스의 내용과 데이터베이스의 내용을 알려주는 방법은 무엇입니까? 많은 감사

UPDATE :

나는() persistenceEnabled = 진실하고도 실제 장치에서이 작업을 실행 FIRDatabase.database했다.을. persistenceEnabled를 비활성화 한 후에도 정상적으로 작동합니다. persistenceEnabled를 사용하지 않고이 문제를 해결하는 방법은 무엇입니까?

답변

3

글쎄요, 여기 제 팁이 있습니다.

나는 거의 동일한 문제가 있었는데이를 해결하기 위해 observeSingleEvent에서 observe으로 바뀌 었습니다. 그리고 나서 Firebase는 핸드폰을 들여다 볼뿐 아니라, 정확하게 그 일을하기 때문에 핸드폰을 들여다 볼 수 있습니다.

+1

실제로 observeSingleEvent는 로컬 캐시의 (오래된/삭제 된) 값으로 즉시 실행되고 리스너가 'persistenceEnabled = true'와 즉시 섞이지 않기 때문에 문제의 원인 일 가능성이 높습니다. 서버에서 업데이트/삭제 이벤트를 얻기 위해 계속 붙어 있어야합니다. –

+0

감사합니다 v Alisson & Frank - 나는 이것을 시도 할 것이다. – Apneist

관련 문제