ฉันมีอาร์เรย์ของคีย์ที่นำไปสู่การโพสต์วัตถุสำหรับเครือข่ายโซเชียลของฉันเช่น / posts / id / (ข้อมูลโพสต์)
เมื่อฉันโหลดโพสต์ฉันโหลด / โพสต์ / 0 แล้ว / โพสต์ / 1 ฯลฯ โดยใช้observeSingleEventOfType(.Value)
วิธีการ
ผมใช้การlazyTableView
โหลดครั้งละ 30 เครื่องและค่อนข้างช้า มีวิธีใดบ้างที่ฉันสามารถใช้หนึ่งในวิธีการสืบค้นหรือวิธีอื่นในการทำให้เร็วขึ้นแม้ว่าฉันจะต้องปรับโครงสร้างข้อมูลในโครงสร้าง JSON ก็ตาม
ฉันมาจาก Parse ที่นำแอปของฉันไปใช้ใหม่และจนถึงตอนนี้ประสบการณ์ก็ค่อนข้างดี เพียงสิ่งเดียวที่ฉันติดอยู่เล็กน้อย ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ!
แก้ไข:
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
}
}
}
ฟังก์ชันวนซ้ำนี้จะเรียกใช้ค่าสำหรับหมายเลขคีย์ i จาก firebase เป็นหลัก หากเป็น NSNULL จะรู้ว่าเป็นโพสต์สุดท้ายที่สามารถโหลดได้และจะไม่ทำอีก หาก NSNULL ไม่ได้รับผลกระทบ แต่i % 29 == 0
จะส่งกลับเป็นกรณีพื้นฐานดังนั้นจึงโหลดโพสต์ได้ครั้งละ 30 โพสต์เท่านั้น เมื่อผมตั้งdoneLoading
ไปtrue
, tableView.reloadData()
จะเรียกว่าใช้สังเกตการณ์ทรัพย์สิน
นี่คือตัวอย่างของลักษณะของอาร์เรย์ที่ฉันเรียกดู
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]