Swift에서 볼 수있는 모든 firebase 클라이언트 예제는 Firebase의 데이터로드가 지나치게 단순화되어있는 것 같습니다. 이제는 모든 문서와 많은 코드를 살펴 보았습니다. 내 신청서가 약간의 단점이 있음을 인정합니다.Firebase와 Swift에서 목록 데이터의 초기로드를 수행하는 올바른 방법은 무엇입니까?
나는보기 컨트롤러가로드 될 때마다 "hey im here!"방에 메시지를 자동 게시하려고합니다. 또한 전형적인 관측 통보로 서버에있는 것을로드합니다. 분명히 호출이 비동기 방 3. 2. 자동 게시물
childAdded
을 준수 1.보기 컨트롤러의 부하 때문에 보장 일어나는 일들의 순서가 없습니다 :나는 흐름이있을 거라고 생각합니다. 자동 처리기가 돌아 오기를 기다리는 완전한 처리기를 사용하여 작업을 단순화하려고했지만 자동 게시 된 메시지가 내 tableview에 두 번로드됩니다.
AutoPoster.sayHi(self.host) { (error) in
let messageQuery = self.messageRef.queryLimited(toLast:25).queryOrdered(byChild: "sentAt")
self.newMessageRefHandle = messageQuery.observe(.childAdded, with: { (snapshot) in
if let dict = snapshot.value as? [String: AnyObject] {
DispatchQueue.main.async {
let m = Message(dict, key: snapshot.key)
if m.mediaType == "text" {
self.messages.append(m)
}
self.collectionView.reloadData()
}
}
})
}
이는 초기로드에 대해 매우 비효율적 인 것으로 나타났습니다. 나는 기본적으로 컬렉션 뷰가 최대 .25s를 새로 고침 할 수있는 타이머를 가진 트릭을 사용하여 새로운 데이터가 들어올 때마다 타이머를 재시작 할 것이라고 수정했습니다. 조금 해킹되었지만 파이어베이스의 이점이 해킹을 정당화한다고 생각합니다.
또한 초기로드에 대해 값 이벤트를 한 번 관찰 한 다음 그 후에 만 childAdded를 관찰했지만 childAdded는 아무 문제없이 호출되기 때문에 문제가 있다고 생각합니다.
나는 모든 로딩 방법에 대한 코드를 게시하고 싶지만 (그리고 질문에 대한 업데이트가 마음에 들지만), 나는 작동하지 않는 대신 디버그하고 싶다. 이런 상황에 권장되는 흐름. 다시 말하지만, 대화에 참여한 방에 자동으로 게시물을 올린 다음 초기 데이터를로드 (내 자동 게시가 최신 메시지 여야 함) 한 다음 수신 새 메시지를 수신합니다. 대신
로 교체하려고합니다. 질문이 뭐야? 또는 공유 한 코드에서 작동하지 않는 것은 무엇입니까? –
내가 게시 한 코드에서 특히, 자동 게시물에 대한 중복 행을 얻습니다. 우리는 디버깅 경로를 갈 수 있습니다 또는 누군가가이 상황에서 목록을 게시하고 즉시로드하기 위해 일부 코드 또는 가상 코드를 공유해야합니다. – Tony