我对firebase相当陌生,所以我缺乏代码并不缺乏尝试更多的“我不知道从哪里开始”。Firebase查询只返回新帖子?
我试图只显示10分钟“旧”或更少的帖子。我要在我的应用程序中运行一个计时器来每秒发送一次查询(假设这不会导致太多问题?)来检查以确保当前帖子没有超过10分钟标记,并且如果他们是,查询不应该返回它们。
我已经设置了当用户发布时间戳创建的地方。
的设置是:
Posts
02983094jfksdflkaj3l
timestamp: 23478923019
我假设我需要orderByValue?按时间戳排序帖子,然后用某种限制返回它,但我不知道如何映射所有这些。
在这里,我们将非常欣赏正确的方向。
在此先感谢!
编辑:我不再收到任何帖子出现在collectionview中...无论我有多少帖子应该满足10分钟以下的查询,只有一个返回。
就像我在下面显示的那样,我没有在snap上得到一个.value返回......它应该返回我在时间戳记打印中显示的timestamp值,不是?
override func viewWillAppear(animated: Bool) {
let cutoff = UInt64(1000 * floor(NSDate().timeIntervalSince1970) - 10*60*1000);
let cutoffFloat = Float(cutoff) // <-- woudnlt take a UInt64 as an AnyObject. I assume its ok to just do this?
DataService.ds.REF_POSTS.queryOrderedByChild("timestamp").queryStartingAtValue(cutoffFloat).observeSingleEventOfType(.ChildAdded) { (snapshot: FIRDataSnapshot) in
print("child added") // <------- isn't ever getting called
self.Posts = []
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
print("timestamp snap: \(snap)") // <---- returns timestamp snap: Snap (timestamp) 23904819242
if let postDict = snap.value as? Dictionary<String, AnyObject> {
print(snap.value)// <----- Returns nothing
let key = snap.key
let post = Post(postKey: key, dictionary: postDict)
self.Posts.append(post)
}
}
}
self.collectionView.reloadData()
}
我不知道这是否是任何帮助,但这里是我的代码,我用之前填充集合视图:
DataService.ds.REF_POSTS.observeEventType(.Value) { (snapshot: FIRDataSnapshot) in
self.Posts = []
if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshots {
print(snap)
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, dictionary: postDict)
self.Posts.append(post)
}
}
}
print("got here")
self.collectionView.reloadData()
}
计时器可能是不必要的,您可能要考虑在最后10分钟内有1024个帖子的情况。这些帖子中有多少应该交付给您的客户?我的猜测是,虽然您可能对所有人都感兴趣,但您真的只想每次查看20个或仅查看最近的20个。并且记住Firebase是异步的 - 通过向节点添加观察者到您的应用会自动收到新帖的通知 - 所以它会*总是*显示最新帖子。轮询通常可以通过让Firebase完成工作来完全消除。 – Jay
@Jay 从一群朋友开始,每次只允许向用户显示9个帖子,10分钟的位对我尝试实现的功能很重要。如果没有帖子显示,没关系,因为应用程序的要点是与具有有限数量“展示时间”的帖子进行互动。 如果我只是从用户的朋友的帖子中提取,限制为9,那么不应该存在大量信息或任何问题? 我也只是假设这是最好的方式去做这件事。以这种方式进行讨论会有什么明显的错误吗? – Noowoo