Tengo una serie de claves que me llevan a publicar objetos para mi red social como / posts / id / (información de la publicación)
Cuando cargo las publicaciones, cargo / posts / 0 y luego / posts / 1, etc. usando el observeSingleEventOfType(.Value)
método.
Utilizo un lazyTableView
para cargar 30 a la vez y es bastante lento. ¿Hay alguna forma en que pueda usar uno de los métodos de consulta u otra forma de hacerlo más rápido incluso si tengo que reestructurar los datos en mi árbol JSON?
Vengo de Parse reimplementando mi aplicación y hasta ahora la experiencia ha sido bastante buena. Solo en esto estoy un poco atascado. ¡Gracias de antemano por la ayuda!
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
}
}
}
Esta función recursiva esencialmente se ejecuta obteniendo el valor de la clave número i de firebase. Si es NSNULL, sabe que es la última publicación posible para cargar y nunca lo vuelve a hacer. Si NSNULL no se ve afectado, pero i % 29 == 0
luego regresa como caso base, por lo que solo se cargan 30 publicaciones a la vez (0 indexadas). Cuando me puse doneLoading
a true
, tableView.reloadData()
se llama usando un observador de la propiedad.
Aquí hay una muestra de cómo se ve la matriz que estoy recuperando
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]