ios - 使用 Firebase 分页时重复按键

标签 ios swift firebase firebase-realtime-database pagination

我正在学习 Firebase 分页。我正在使用一种方法,将最后添加的项目的 key 存储在上一页中,以便下一页可以从那里继续。

问题是,当使用 ref.queryStarting(at value: lastItemKey) 继续从最后添加的键检索项目时,最后一个项目会重复两次(因为 queryStarting > 包含)。

因此,如果我将查询限制为 5 个,我最终只会得到 4 个新项目,因为 1 个将是重复的。

我想到的唯一解决方案是再请求一项并删除重复的一项,但我想知道这样做是否有效。 (因为我们在每个查询中浪费了一项)

如果有任何帮助,我的代码如下所示:

    // rest of the pages 
    if let lastItemID = lastItemKey {
        itemPageRef = self.itemsRef.queryOrderedByKey().queryStarting(atValue: lastItemID)
            .queryLimited(toFirst: UInt(amount))
    } else {
        // First page of data: we retrieve the first (amount) items
        print("We are in the first page of DATA")
        itemPageRef = self.itemsRef.queryOrderedByKey().queryLimited(toFirst: UInt(amount))
    }

    itemPageRef.observeSingleEvent(of: .value, with: { [weak self] (snapshot) in 

最佳答案

请求页面之间的重叠子节点是 Firebase API 支持的唯一方式。由于没有其他方法可以做到这一点,因此也没有更有效的方法。

也就是说,它通常非常高效,特别是当您使用 25 个以上子节点的页面大小时,这在我见过的大多数用例中也更合理。

关于ios - 使用 Firebase 分页时重复按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58494390/

相关文章:

ios - Collection View 显示滚动时选择的尚未选择的单元格

ios - 图像的 UIImagePNG 表示和十六进制表示

ios - 是否有用于访问通话记录的 iOS API?

swift - 如何缩短这段代码以防止代码重复?

arrays - 使用减少(到 :_:) to filter adjacent equal elements

android - flutter : how i get data from firestore in List<String>?

ios - 使用 Xamarin.Forms 更新 ListView 文本绑定(bind)会导致 iOS 上闪烁

javascript - 在 Cordova/Ionic iOS 应用程序中使用 WWW-Authenticate 处理 HTTP 401

java - 如何构建提要和关注系统?

javascript - 将日期对象转换为 Firestore 时间戳