Tôi có một loạt các khóa dẫn đến đăng các đối tượng cho mạng xã hội của mình như vậy / posts / id / (post info)
Khi tôi tải các bài viết, tôi tải / posts / 0 và sau đó là / posts / 1 etc bằng observeSingleEventOfType(.Value)
phương pháp này.
Tôi sử dụng a lazyTableView
để tải 30 cùng một lúc và nó khá chậm. Có cách nào tôi có thể sử dụng một trong các phương thức truy vấn hoặc một cách khác để làm cho nó nhanh hơn ngay cả khi tôi phải cấu trúc lại dữ liệu trong cây JSON của mình.
Tôi đến từ Phân tích cú pháp để triển khai lại ứng dụng của mình và cho đến nay trải nghiệm này khá tốt. Chỉ một điều này tôi hơi bị mắc kẹt. Xin được cảm ơn trước về sự giúp đỡ!
BIÊN TẬP:
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
}
}
}
Về cơ bản, hàm đệ quy này chạy lấy giá trị cho khóa số i từ firebase. Nếu đó là NSNULL, nó biết rằng đó là bài viết cuối cùng có thể tải và không bao giờ lặp lại. Nếu NSNULL không nhận được lần truy cập nhưng i % 29 == 0
sau đó nó trả về như một trường hợp cơ sở, do đó chỉ có 30 bài đăng được tải cùng một lúc (0 được lập chỉ mục). Khi tôi đặt doneLoading
thành true
, tableView.reloadData()
được gọi bằng trình quan sát thuộc tính.
Đây là ví dụ về mảng mà tôi đang tìm nạp trông như thế nào
"ideaPosts" : [ {
"id" : 0,
"message" : "Test",
"upvotes" : 1,
"user" : "Anonymous"
}, {
"id" : 1,
"message" : "Test2",
"upvotes" : 1,
"user" : "Anonymous"
} ]