Search
📲

[FireBase - iOS] 데이터 불러오기

레퍼런스 가져오기

var ref: DatabaseReference! ref = Database.database().reference()
Swift
복사

어레이 형태로 불러오기

변경사항 지속 수신 대기 : .observe()

리스너가 연결될 때 한번 트리거 > 이후 데이터가 변경될 때마다 다시 트리거 = 변경사항 수신 대기
DB.REF_TWEETS.observe(.childAdded) { snapShot in // 데이터가 변경될 때마다 계속 콜백 snapshot 에 해당 위치의 모든 데이터가 포함됨. }
Swift
복사

데이터 한번만 읽기 : .getData()

데이터가 한번만 필요한 경우 getData() 사용 스냅샷 가져옴.
ref.child("users/\(uid)/username").getData(completion: { error, snapshot in guard error == nil else { print(error!.localizedDescription) return; } let userName = snapshot.value as? String ?? "Unknown"; });
Swift
복사

캐싱된 데이터 가져오기 : .observeSingleEvent()

캐싱된 데이터의 경우 . 로컬 디스크의 캐시에서 데이터를 즉시 가져옴. → 사용자 프로필 같은 것. 자주 변경되지 않거나 능동적으로 수신 대기할 필요가 없는 데이터에 사용.
let userID = Auth.auth().currentUser?.uid ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { snapshot in // Get user value let value = snapshot.value as? NSDictionary let username = value?["username"] as? String ?? "" let user = User(username: username) // ... }) { error in print(error.localizedDescription) }
Swift
복사

리스너 분리

ViewController를 벗어나도 관찰자는 데이터 동기화를 자동으로 중지하지 않습니다. 관찰자를 적절히 삭제하지 않으면 데이터가 계속 로컬 메모리와 동기화됩니다. 관찰자가 더 이상 필요하지 않으면 연결된 FIRDatabaseHandle을 removeObserverWithHandle 메서드에 전달하여 삭제하세요.
참조에 콜백 블록을 추가하면 FIRDatabaseHandle이 반환됩니다. 이 핸들을 사용하여 콜백 블록을 삭제할 수 있습니다.
하나의 데이터베이스 참조에 여러 리스너를 추가하면 이벤트가 발생할 때 각 리스너가 모두 호출됩니다. 해당 위치에서의 데이터 동기화를 중지하려면 removeAllObservers 메서드를 호출하여 특정 위치의 모든 관찰자를 삭제해야 합니다.
리스너에서 removeObserverWithHandle 또는 removeAllObservers를 호출해도 하위 노드에 등록된 리스너는 자동으로 삭제되지 않습니다. 이러한 참조 또는 핸들을 추적하여 삭제해야 합니다.