Mam tablicę kluczy, które prowadzą do publikowania obiektów w mojej sieci społecznościowej, takich jak: / posts / id / (informacje o wpisie)
Kiedy ładuję posty, ładuję / posts / 0, a następnie / posts / 1 itd., Używając observeSingleEventOfType(.Value)metody.
Używam lazyTableViewdo załadowania 30 na raz i jest to dość wolne. Czy istnieje sposób, w jaki mogę użyć jednej z metod zapytania lub innego sposobu na przyspieszenie, nawet jeśli muszę zmienić strukturę danych w moim drzewie JSON.
Pochodzę z Parse, ponownie wdrażam moją aplikację i jak dotąd doświadczenie jest całkiem dobre. Tylko ta jedna rzecz, na której trochę utknąłem. Z góry dziękuję za pomoc!
EDYTOWAĆ:
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
}
}
}
Ta rekurencyjna funkcja zasadniczo pobiera wartość klucza numer i z firebase. Jeśli jest to NSNULL, wie, że jest to ostatni możliwy do załadowania post i nigdy więcej tego nie robi. Jeśli NSNULL nie zostanie trafiony, ale i % 29 == 0wróci jako przypadek podstawowy, więc tylko 30 postów jest ładowanych na raz (0 indeksowanych). Kiedy ustawiony doneLoadingdo true, tableView.reloadData()nazywany jest przy użyciu właściwości obserwatora.
Oto próbka tego, jak wygląda tablica, którą pobieram
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]