我按照教程来了解时间表。在本教程中,他在从Firebase检索数据时使用.Value
。我后来才知道它效率不高,因为每当添加帖子时它都会重新下载所有内容。这会导致所有用户的时间线闪烁并自动滚动。
我正在尝试将其转换为使用.childAdded
,但无法弄清楚如何让它工作。这是当前的代码:
DataService.ds.REF_POSTS.child("\(self.loggedInUser!.uid)").observeEventType(.Value, withBlock: { postDictionary in
if postDictionary.exists() {
if let snapshots = postDictionary.children.allObjects as? [FIRDataSnapshot] {
self.posts = []
for snap in snapshots {
if let postDict = snap.value as? NSDictionary {
for(name, value) in postDict {
let interval = postDict.objectForKey("timePosted") as! Double
let formattedDate = NSDate(timeIntervalSince1970: interval)
let timeAgo = self.getDate(formattedDate)
if name as! String == "postedBy" {
DataService.ds.REF_USERS.child(value as! String).observeSingleEventOfType(.Value, withBlock: { (userDictionary) in
let userDict = userDictionary.value as! NSDictionary
let username = userDict.objectForKey("username")!
let profileThumbUrl = userDict.objectForKey("profileThumbUrl")!
let key = snap.key
let post = Post(postKey: key, dictionary: postDict, username: username as! String, profileThumbUrl: profileThumbUrl as! String, timeAgo: timeAgo)
self.posts.append(post)
self.collectionView?.reloadData()
})
}
}
}
}
}
}
})
第二次Firebase调用只是抓取用户缩略图和用户名的用户信息。当我将顶部的.Value
更改为.ChildAdded
时,时间轴上不会显示任何内容。我试过搞乱文件类型等等,但无法让它工作。
更新
好的,所以在这里阅读了另一个Firebase问题后,看起来.ChildAdded
只会添加孩子。我认为它得到了相同的数据,只是在添加一个孩子时整个事情都会运行。
所以看起来我将不得不在这里更改循环并运行循环添加逐个添加的每个子项。重做整个事情,如果我能完成它就会发布差异。