So / posts / id / (gönderi bilgisi) gibi sosyal ağım için nesneler göndermeye yol açan bir dizi anahtarım var
Gönderileri yüklediğimde observeSingleEventOfType(.Value)yöntemi kullanarak / posts / 0 ve ardından / posts / 1 etc yüklerim.
Bir kullanmak lazyTableViewbir anda yük 30'a ve oldukça yavaştır. JSON ağacımdaki verileri yeniden yapılandırmam gerekse bile sorgu yöntemlerinden birini veya daha hızlı hale getirmenin başka bir yolunu kullanabilmemin bir yolu var mı?
Parse'den uygulamamı yeniden uygulayarak geliyorum ve şu ana kadar elde ettiğim deneyim oldukça iyi. Sadece bu biraz takılıp kaldığım tek şey. Yardım için şimdiden teşekkürler!
DÜZENLE:
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
}
}
}
Bu özyinelemeli işlev, esas olarak, firebase'den anahtar numarası i'nin değerini alarak çalışır. Eğer NSNULL ise, yüklenebilecek en son gönderi olduğunu bilir ve bir daha asla yapmaz. NSNULL isabet almazsa ancak i % 29 == 0temel durum olarak geri döner, böylece bir seferde yalnızca 30 gönderi yüklenir (0 indekslenir). Ben ayarlandığında doneLoadingiçin true, tableView.reloadData()bir özellik gözlemci kullanılarak adlandırılır.
İşte getirdiğim dizinin nasıl göründüğüne dair bir örnek
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]