Ho una serie di chiavi che portano a postare oggetti per il mio social network come così / posts / id / (informazioni sul post)
Quando carico i post, carico / posts / 0 e poi / posts / 1 ecc. Usando il observeSingleEventOfType(.Value)metodo.
Uso un lazyTableViewper caricare 30 alla volta ed è piuttosto lento. Esiste un modo per utilizzare uno dei metodi di query o un altro modo per renderlo più veloce anche se devo ristrutturare i dati nel mio albero JSON.
Vengo da Parse che reimplementa la mia app e finora l'esperienza è stata abbastanza buona. Solo questa cosa su cui sono un po 'bloccato. Grazie in anticipo per l'aiuto!
MODIFICARE:
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
}
}
}
Questa funzione ricorsiva viene eseguita essenzialmente ottenendo il valore per la chiave numero i da Firebase. Se è NSNULL sa che è l'ultimo post possibile da caricare e non lo fa mai più. Se NSNULL non viene colpito ma i % 29 == 0viene restituito come caso base, vengono caricati solo 30 post alla volta (0 indicizzati). Quando impostato doneLoadingsu true, tableView.reloadData()viene chiamato utilizzando un osservatore di proprietà.
Ecco un esempio di come appare l'array che sto recuperando
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]