gpt4 book ai didi

ios - 使用不同的查询在帖子中获取 Firebase 用户信息

转载 作者:行者123 更新时间:2023-11-28 07:40:00 24 4
gpt4 key购买 nike

我的 Firebase 实时数据库中有两个表:帖子和用户。结构是:

users
-- userID
---- userName
---- userProfilePicURL

posts
-- postID
---- postTimeStamp
---- postTitle
---- postContent

现在,我像这样在函数 loadData() 中获取数据:

var Ref: DatabaseReference!
Ref = Database.database().reference()

Ref.child("posts").queryOrdered(byChild: "postTimeStamp").observeSingleEvent(of: .value) { (snapshot) in

for child in snapshot.children {

let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]

// set all additional information and append to array

self.collectionView?.reloadData()

}

}

这很好用。但是,我想运行第二个查询来获取用户信息(userName、userProfilePicURL),这样也可以显示这些信息,因为我现在只有用户 ID。我这样做如下:

var Ref: DatabaseReference!
Ref = Database.database().reference()

Ref.child("posts").queryOrdered(byChild: "postTimeStamp").observeSingleEvent(of: .value) { (snapshot) in

for child in snapshot.children {

let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]

Ref.child("users").child(dict["userID"] as! String).observeSingleEvent(of: .value, with: { (snapUser) in

let valueUser = snapUser.value as! [String: Any]

// set all additional information and append to array

self.collectionView?.reloadData()

}

}

}

尽管发生了什么,它获取了用户信息并正确显示了它,但是我的第一个查询的时间顺序被破坏了。它显示同一用户的所有帖子,因此它们按用户 ID 而不是按 postTimeStamp 排序。是否有解决此问题的方法,或者我是否需要采用完全不同的方法?

更新:到目前为止我发现了什么当我执行 print(dict) 时,所有内容都以正确的顺序显示。所以错误发生在后期。当我执行 dump(self.posts)(包含所有帖子的数组)时,它们以错误的顺序显示。

我的猜测是,不是按照第一个查询中的要求按时间顺序附加项目,而是根据用户 ID 添加项目,因此应用程序会根据用户 ID 获取所有帖子。但是我不知道这是为什么,而且我也无法在 Internet 上找到它。

最佳答案

原因:

  • 错误背后的原因是,您在 for 循环中使用了异步方法。
  • 所以你没有按顺序获取数据,因为从 firebase 获取数据是异步方法。您必须为用户使用另一个数组并使用 useriD 管理它

解决方法:

  • 您可以在项目的单元格内运行此...另一种方法是您可以为用户获取新数组并使用帖子数组的 userId 从该数据加载用户数据。

关于ios - 使用不同的查询在帖子中获取 Firebase 用户信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com