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 上进行分页。我见过的最常见的方法是进行一些逐渐扩大范围的查询,以便首先显示附近的项目,正如您已经尝试过的那样。您还可以获取更大范围的所有键,然后自己在远处订购它们以进行分页。这样您只需要检索密钥子集的详细信息。两种方法都是有效的,客观上没有一种比另一种更好。
另见:
我有一个 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)
.
我对此主要担心的是,如果我在数据库中有一组非常大的项目,那么迭代(和排序)所有键的效率会有多高。
另一种方法是从一个小半径开始,然后在每一页中增加它直到达到极限,尽管它看起来更有效,但我仍然需要半径内的项目总数(以计算单元格数CollectionView
)
按位置对结果进行分页的正确方法是什么?
目前无法在 Geofire 上进行分页。我见过的最常见的方法是进行一些逐渐扩大范围的查询,以便首先显示附近的项目,正如您已经尝试过的那样。您还可以获取更大范围的所有键,然后自己在远处订购它们以进行分页。这样您只需要检索密钥子集的详细信息。两种方法都是有效的,客观上没有一种比另一种更好。
另见: