Eu tenho uma série de chaves que levam a objetos de postagem para minha rede social, como / posts / id / (informações de postagem)
Quando eu carrego os posts eu carrego / posts / 0 e então / posts / 1 etc usando o observeSingleEventOfType(.Value)método.
Eu uso um lazyTableViewpara carregar 30 de cada vez e é bem lento. Existe alguma maneira de usar um dos métodos de consulta ou outra maneira de torná-lo mais rápido, mesmo se eu tiver que reestruturar os dados em minha árvore JSON.
Estou vindo do Parse reimplementando meu aplicativo e até agora a experiência tem sido muito boa. Só uma coisa em que estou um pouco preso. Obrigado antecipadamente pela ajuda!
EDITAR:
func loadNext(i: Int) {
// check if exhists
let ideaPostsRef = Firebase(url: "https://APPURL")
ideaPostsRef.childByAppendingPath(i.description).observeSingleEventOfType(.Value, withBlock: {
(snapshot) in
if i % 29 == 0 && i != 0 && !self.hitNull { return }
// false if nil
// true if not nil
if !(snapshot.value is NSNull) {
let postJSON = snapshot.value as! [String: AnyObject]
print("GOT VALID \(postJSON)")
let post = IdeaPost(message: postJSON["message"] as! String, byUser: postJSON["user"] as! String, withId: i.description)
post.upvotes = postJSON["upvotes"] as! Int
self.ideaPostDataSource.append(post)
self.loadNext(i + 1)
} else {
// doesn't exhist
print("GOT NULL RETURNING AT \(i)")
self.doneLoading = true
self.hitNull = true
return
}
}
}
Essa função recursiva basicamente executa obtendo o valor da chave número i do firebase. Se for NSNULL, ele saberá que é a última postagem possível para carregar e nunca mais o fará. Se NSNULL não for atingido, i % 29 == 0então ele retorna como um caso base, então apenas 30 posts são carregados por vez (0 indexado). Quando eu configuro doneLoadingpara true, tableView.reloadData()é chamado usando um observador de propriedade.
Aqui está um exemplo de como é a matriz que estou buscando
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]