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 lazyTableView
per 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 == 0
viene restituito come caso base, vengono caricati solo 30 post alla volta (0 indicizzati). Quando impostato doneLoading
su 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"
} ]