Saya memiliki serangkaian kunci yang mengarah ke objek posting untuk jejaring sosial saya seperti so / posts / id / (post info)
Ketika saya memuat posting saya memuat / posts / 0 dan kemudian / posts / 1 dll menggunakan observeSingleEventOfType(.Value)
metode.
Saya menggunakan lazyTableView
untuk memuat 30 sekaligus dan itu cukup lambat. Apakah ada cara saya dapat menggunakan salah satu metode kueri atau cara lain untuk membuatnya lebih cepat bahkan jika saya harus merestrukturisasi data di pohon JSON saya.
Saya berasal dari Parse yang menerapkan ulang aplikasi saya dan sejauh ini pengalamannya cukup bagus. Hanya satu hal ini saya agak terjebak. Terima kasih sebelumnya atas bantuannya!
EDIT:
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
}
}
}
Fungsi rekursif ini pada dasarnya berjalan mendapatkan nilai untuk kunci nomor i dari firebase. Jika NSNULL ia tahu itu adalah posting terakhir yang mungkin dimuat dan tidak pernah melakukannya lagi. Jika NSNULL tidak terkena tetapi i % 29 == 0
kemudian kembali sebagai kasus dasar sehingga hanya 30 posting yang dimuat pada satu waktu (0 diindeks). Saat saya menyetel doneLoading
ke true
, tableView.reloadData()
dipanggil menggunakan pengamat properti.
Berikut adalah contoh dari array yang saya ambil
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]