【发布时间】:2018-07-21 02:05:59
【问题描述】:
我正在获取当前用户的朋友并将用户存储在一个数组中,该数组会显示在集合视图中。朋友集合视图位于我的主视图控制器上,这意味着它始终保留在用户堆栈中。
我的问题是,如果用户通过用户个人资料页面添加或删除朋友,然后导航回主页视图,我必须重新获取数据并刷新 viewWillAppear 中的集合视图.这使得应用程序的数据成本很高,我绝对认为这不是最有效的方式。
我知道 Firebase 允许我设置观察者,但是我不太确定在不接收大量数据的情况下执行此操作的最佳方法。
这是我目前获取用户朋友的方式
func fetchFriends() {
let userID = Auth.auth().currentUser?.uid
var tempFriend = [UserClass]()
self.usersArray.removeAll()
collectionView.reloadData()
let friendRef = self.databaseRef.child("users").child(userID!).child("Friends")
friendRef.queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
let friendID = "\(snapshot.value!)"
let usersRef = self.databaseRef.child("users")
usersRef.observeSingleEvent(of: .value, with: { (users) in
for user in users.children {
let friend = UserClass(snapshot: user as! DataSnapshot)
if friendID == friend.uid {
tempFav.append(friend)
}
}
self.usersArray = tempFav
self.collectionView.reloadData()
if self.usersArray.count == 0 {
self.noDataLabel.text = "You have no friends!"
self.noDataLabel.isHidden = false
} else {
self.noDataLabel.text = "Loading..."
self.noDataLabel.isHidden = true
}
})
})
}
这会在用户的viewWillAppear 中调用
为了使这个问题尽可能清楚,刷新用户朋友的最佳方式是什么,而不需要在每次视图出现时再次获取整个列表。
【问题讨论】:
-
您已经在使用
childAdded观察者,只有当数据库发生变化时才会返回。这是迄今为止最好的方法
标签: ios swift firebase firebase-realtime-database uicollectionview