2017-05-31 75 views
0

我正在创建一个instagram风格的Feed,并试图找出如何根据您关注的人来对帖子进行分页。Firebase Swift分页新闻Feed

我的数据结构如下:

posts: 
     user1: 
      post1 
      post2 
     user2: 
      post3 
      post4 
     user3: 
      post5 
      post6 
      post7 

user-following: 
     user1: 
      user2 
      user3 

所以帖子被创建后用户组织。我也有一个当前用户关注的人的结构。因此,我抓取当前用户所关注的用户的uid,然后转到帖子部分,并获取这些用户的所有帖子,并且每个帖子都有一个createdAt值。

当我使用queryByChild(“createdAt”)时,它将每个用户的数据排序,而不是绝对。 所以它排序user2的帖子,然后user3的帖子,而不是绝对的排序,因为它拉动数据的块。

我需要独立于拥有新闻Feed帖子的用户的最新总体帖子。我可以获取快照中的所有发布信息,但有没有办法对快照进行排序?我需要找到一种方法来让数据库对信息进行整体分类,而不是分块,然后从该分类列表中提取最新的“x”个帖子。

否则,我必须将所有内容都放入我的程序中,然后将它排序到数组中,然后从数组中取出最近的'x'数量的帖子进行分页。问题是,如果有1000个帖子,这是一个巨大的数据拉,将使应用程序超级慢,可能会崩溃。有什么建议么?

+0

Firebase文档非常有帮助。查看[使用iOS上的数据列表](https://firebase.google.com/docs/database/ios/lists-of-data),其中指出* queryLimitedToLast:设置从结尾返回的最大项数*在这种情况下,将其设置为15,这将返回15个'最近'的帖子。将来,请在您的问题中包含有问题的代码以及您的Firebase结构(作为TEXT)。您可能需要查看[如何创建一个最小化,完整和可验证的示例](https://stackoverflow.com/help/mcve) – Jay

+0

@Dirty如果您希望Jay查看您的回复,请使用“@Jay”评论 –

+0

@Jay感谢您的回复。我的问题进一步深入,我必须得到用户关注的人的帖子。因此查询将获取每个用户的帖子,然后转到下一个用户等等,所以一旦观察到所有数据,它就不会对帖子进行排序,而是以块的形式进行排序。所以帖子不会完全排序,但只能由每个用户进行排序。是否有办法在快照中一次抓取所有数据,然后对其进行排序,然后拖动最后的15个? – Dirty

回答

0

在我看来这里只有一个办法是:

1)仔细检查每个用户,您按照

2)获取最后X帖子

3)排序数组按日期

4)结果数组最后的X

如果你有table view

为了使无限滚动需要存储数组,并从它那里得到的职位。

刷新 - 重新加载帖子数组。

我有相同的结构,我认为这是唯一的方式,我们如何能做到这一点。

希望它是正确的,并帮助

+0

谢谢你的回复。但它仍然不能解决问题。从每个用户那里获取最后的'x'帖子并不能满足您关注所有用户的最新帖子的需求。假设你关注500人,你不能通过并获取每个用户的最后'x'帖子,因为没有办法确定哪些帖子是最近的500个用户。这个结构的分页在firebase中不可行吗? – Dirty

+0

@Dirty你怎么生成ID的邮件节点?我有相同的结构,我使用childByAutoId。我在表格视图中完成了无限滚动。有了这个alghorithm –

+0

我也使用childByAutoId。那么你是否解决了这个问题?我不确定无限滚动是什么,但如果你知道了这一点,请让我知道如何去做! – Dirty