오프라인 노드에서 시작된 응용 프로그램과 함께 firebase를 사용하고 있습니다. 일부 노드의 자식 값에 가입하면 observe*(_:,withBlock:)
의 콜백이 실행되지 않습니다 가치 또는 변화). 직접 값에 대한 구독 (자식이 없음)은 정상적으로 작동합니다. 코드 조각에서 살펴 보자 :오프라인 모드에서 시작된 Firebase는 자식 값에 대해 osberve *를 실행하지 않습니다
let database = FIRDatabase.database()
database.reference().keepSynced(true)
let databaseRef = database.reference()
database.goOffline()
databaseRef.child("user").setValue("user1")
let userKey = databaseRef.child("usr").childByAutoId().key
let userValues = ["uid": "uid",
"name" : "name",
"surname" : "surname"]
databaseRef.child("/usr/\(userKey)/").setValue(userValues)
//1
databaseRef.child("user").observeSingleEventOfType(.Value, withBlock:{ snap in
print("works")
})
//2
databaseRef.child("usr").observeSingleEventOfType(.Value, withBlock:{ snap in
print("doesnt work")
})
//3
databaseRef.child("usr/\(userKey)/uid").observeSingleEventOfType(.Value, withBlock:{ snap in
print("works")
})`
구독 1 개 &이 작품을 잘하지만, subscribtion 2 회 이상 데이터베이스가 온라인 때까지 발생하지 않습니다. 순간부터 데이터베이스와 원격 동기화 나는 오프라인으로 갈 수 있고 모든 것이 제대로 작동합니다. 누구든지이 문제를 처리하는 방법을 알고 있습니까?
답장을 보내 주셔서 감사합니다. 그렇다면 왜 사건이 1과 2의 발췌 문장에서 해고되었는데, 어디에서 하나의 값을 자식 노드로 참조할까요? – mprostak
숫자 3은 사용자 코드에서 해당 위치의 값을 설정했기 때문에 실행됩니다. 따라서 Firebase 캐시에는 해당 노드에 대한 값이 있습니다. 나는 당신의 첫 번째 테스트에도 똑같이 적용된다고 생각하지만 확실치 않습니다. –
각 경우에 대해 값을 설정합니다. 1 : 노드 "user"에 대한 값 "user1"을 두 번째로 설정합니다. 노드 "usr"에 대한 값을 가진 자식 노드를 설정합니다. 3 번째로 자식에 단일 값을 설정합니다. 노드 "usr"에 대한 노드. 아직도 제 2의 사람이 아무리 해고당하는 지 이해하지 못한다. 적어도 온라인으로 한 번 방문하면 문제없이 오프라인 모드에서 작업 할 수 있습니다. 3 번의 테스트가 정상적으로 수행됩니다. 다시 말해, 앱을 삭제하고 오프라인에서 신선한 상태로 시작하면 문제가 발생합니다. – mprostak