通过使用查询而不是反复观察单个事件,加快为我的社交网络应用程序提取帖子
我有一系列的键导致我的社交网络的帖子对象像/ posts / id /(发布信息)
当我加载帖子时,我使用该observeSingleEventOfType(.Value)
方法加载/发布/ 0然后/ posts / 1等。
我使用a一次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 } }}
这个递归函数基本上从firebase获取密钥号i的值。如果它是NSNULL,它知道这是最后一个可能加载的帖子,永远不会再做。如果NSNULL没有被击中但是i % 29 == 0
它以基本情况返回,所以一次只加载30个帖子(0索引)。当我设置doneLoading
为时true
,tableView.reloadData()
使用属性观察者调用。
这是我正在获取的数组的样本
"ideaPosts" : [ { "id" : 0, "message" : "Test", "upvotes" : 1, "user" : "Anonymous" }, { "id" : 1, "message" : "Test2", "upvotes" : 1, "user" : "Anonymous" } ]
相关分类