【问题标题】:Firebase: cannot retrieve children if they are less than the specified number in queryLimitedFirebase:如果孩子小于 queryLimited 中的指定数字,则无法检索孩子
【发布时间】:2020-10-11 08:55:23
【问题描述】:

当用户滚动对话表视图时,我有以下函数被调用,它运行良好,但如果剩余的孩子小于指定的数量,它不会检索!更有趣的是,这些值出现在print(snapshot.value) 中,但不在print(child) 中。即使小于指定数量,如何获取所有节点?

谢谢。

func fetchBatch(betweenUser userID: String, fromTimestamp: Double , completion: @escaping([Message]) -> ()){
        guard let currentUID = Auth.auth().currentUser?.uid else { return }
        var messages = [Message]()
        REF_MESSAGES.child(currentUID).child(userID).queryOrdered(byChild: "timestamp").queryEnding(atValue: fromTimestamp).queryLimited(toLast: 20).observeSingleEvent(of: .value) { snapshot in
            print(snapshot.value)
            for child in snapshot.children {
                print(child)
                if let childSnapshot = child as? DataSnapshot {
                    guard let dictionary = childSnapshot.value as? [String: AnyObject] else {return}
                    let message = Message(dictionary: dictionary)
                    messages.append(message)
                }
            }
            return completion(messages)
        }
    }

【问题讨论】:

  • 嗯。我没有看到这种行为。 toLast 设置从有序结果列表末尾返回的最大项目数,如果更少,它可以返回更少。在您的代码中,snapshot.value 是所有子节点,然后 for 循环中的子节点是每个子节点 - 它是相同的数据。如果您将子项转换为数组 let allData = snapshot.children.allObjects as! [DataSnapshot] 然后遍历 allData - 结果相同会怎样?
  • 感谢@Jay 的回答。确切地!两者应该具有相同的数据。这就是为什么我觉得它很奇怪。尝试了您的建议,但不幸的是产生了相同的结果。
  • 我认为快照不可能有两组不同的数据。你还有其他事情要发生。
  • @Jay 这就是我想要弄清楚的,导致这个错误的东西,我认为它是函数本身的东西,因为在它的范围内发生的所有事情甚至在返回数组之前.
  • 只是猜测,但您的数据结构可能有问题。如果消息数组失败或失败,则该保护语句将阻止填充消息数组。所以我的猜测是你正在检索 10 个子笔记,你对前 7 个然后第 8 个的迭代使保护语句失败,所以看起来你检索的比你有的少。

标签: swift firebase firebase-realtime-database


【解决方案1】:

只是猜测,但您的数据结构可能有问题。

那个守卫声明

guard let dictionary = childSnapshot.value as? [String: AnyObject] else {return}

将阻止消息数组在失败时完全填充。

我的猜测是你检索说,10 个子笔记,然后当代码迭代它们时,在某些时候,由于结构,保护语句失败。例如 [Int: Any] 而不是 [String: Any]

最终结果是并非所有子节点都未添加到数组中 - 这反过来意味着数组中的元素少于从 Firebase 中实际检索到的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多