J'ai un tableau de clés qui mènent à publier des objets pour mon réseau social comme so / posts / id / (post info)
Lorsque je charge les messages, je charge / posts / 0 puis / posts / 1 etc. en utilisant la observeSingleEventOfType(.Value)
méthode.
J'utilise un lazyTableView
pour charger 30 à la fois et c'est assez lent. Est-il possible d'utiliser l'une des méthodes de requête ou un autre moyen de l'accélérer même si je dois restructurer les données dans mon arbre JSON.
Je viens de Parse réimplémentant mon application et jusqu'à présent, l'expérience a été plutôt bonne. Juste cette chose sur laquelle je suis un peu coincé. Merci d'avance pour l'aide!
ÉDITER:
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
}
}
}
Cette fonction récursive exécute essentiellement l'obtention de la valeur du numéro de clé i à partir de Firebase. Si c'est NSNULL, il sait que c'est la dernière publication possible à charger et ne le fait plus jamais. Si NSNULL n'est pas atteint, mais i % 29 == 0
il retourne comme cas de base, donc seuls 30 messages sont chargés à la fois (0 indexé). Lorsque je définis doneLoading
sur true
, tableView.reloadData()
est appelé à l'aide d'un observateur de propriété.
Voici un exemple de ce à quoi ressemble le tableau que je récupère
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]