2017-12-15 21 views
2

Firebase Database가있는 응용 프로그램에서 작업하고 있으며 사용자가 오프라인 일 때 항목을 추가 할 수 있도록 허용하려고합니다. 다음과 같은 경우 상상 (오프라인 모두를, 그것은 온라인으로 완벽하게 작동) :Firebase 데이터베이스가 오프라인으로 값을 반환하지 않습니다.

  1. 이 사용자는 (주의 tableview에 표시 - 작품) 클라이언트 추가 새롭게 추가 된 클라이언트의 상세보기에
  2. 을, 그가 추가하는 그와 약속. 약속은 Client Detail ViewController의 테이블 뷰에 나열됩니다.
  3. 약속을 추가하면 콜백이 호출하지 않기 때문에 테이블 뷰가 새로 고쳐지지 않습니다. 코드에서

: 포스트 상세 뷰 컨트롤러의 viewDidLoad에 방법에 고객

  • 의 값으로 사전입니다

    1. navCont.child = userDB.child(entityNameClients).childByAutoId() navCont.child?.setValue(post), 나는 다음과 같은 코드를 호출 : getUsersDBReference().child(entityNameAppointments).child(clientKey).observe(.value). >하고있는 tableview - 콜백은 약속 2의 콜백이 호출되지 않습니다
    2. var appointment:DatabaseReference 
      

      appointment = getUsersDBReference().child(entityNameAppointments).child(clientKey).childByAutoId() appointment.setValue(appointmentDict)

    3. 에게 (추가 (거기에 어떤 요소가없는 아마 때문에)
    4. 호출되지 않습니다

    BTW, 나는 앱 대표 applicationDidLoad -method에 Database.database().isPersistenceEnabled = true 설정) 새로운 약속과 함께 새로 고쳐지지 않습니다. 그리고 클라이언트를 온라인에 추가 한 다음 오프라인 상태가되면 제대로 작동합니다. 중포 기지 지원

  • 답변

    0

    답변 :

    SDK는 "부분"데이터 값 이벤트를 발생하지 않는 시도합니다. 관찰중인 위치의 하위 노드 만 업데이트하기 때문에 "완전한"데이터가 없으므로 관찰자는 해고되지 않습니다. SDK에 해당 노드에 대한 "완료"데이터가있는 경우 (예 : 전체 노드를 덮어 썼거나 이전에 온라인 상태 였고 완전한 데이터를 가지고 있기 때문에) 이벤트를 업데이트하면 이벤트가 실행됩니다.

    한 가지 해결 방법은 Value 대신 ChildAdded (및 ChildChanged 등) 이벤트를 사용하는 것입니다.