ios - 如何使用 Geofire 和 Firebase 对结果进行分页

ios - How to paginate results using Geofire with Firebase

我有一个 CollectionView 显示按位置排序的项目,我试图按给定数量(f.e 20 项)对它们进行分页。

我正在使用 Geofire 按位置对它们进行排序,但问题是它不支持受结果计数限制的查询,因此如果不访问所有 ID,我将无法获得整个页面。

我想出了在第一页上按位置排序的给定位置中的所有项目键的想法:

locationQuery?.observe(.keyEntered, with: { (key, location) in
    print("KEY: ", key, " and location: ", location.coordinate)
    itemKeys.append(key)
})

locationQuery?.observeReady {
    print("All item keys loaded. There are: ", itemKeys.count, " items in radius")
    locationQuery?.removeAllObservers()
    completion(itemKeys) //itemKeys.count would be the number of cells in the collectionView
}

然后保存它们,并在每个页面中使用 Firebase rererence.child(itemKeyInArray).

检索和查询 itemKeys 的下一个 (pageAmount)

我对此主要担心的是,如果我在数据库中有一组非常大的项目,那么迭代(和排序)所有键的效率会有多高。

另一种方法是从一个小半径开始,然后在每一页中增加它直到达到极限,尽管它看起来更有效,但我仍然需要半径内的项目总数(以计算单元格数CollectionView)

按位置对结果进行分页的正确方法是什么?

目前无法在 Geofire 上进行分页。我见过的最常见的方法是进行一些逐渐扩大范围的查询,以便首先显示附近的项目,正如您已经尝试过的那样。您还可以获取更大范围的所有键,然后自己在远处订购它们以进行分页。这样您只需要检索密钥子集的详细信息。两种方法都是有效的,客观上没有一种比另一种更好。

另见: