我是Firebase的新手,在清理构建文件夹之前和之后,我都经历了不同的获取结果。我想知道用相同的代码获得不同的结果是否普遍?此外,从Firebase的数据库中删除节点后,我的应用仍会获取已删除的帖子。我该如何解决这个问题?
我发现,如果不注销用户帐户,则会删除该用户的数据库。重新加载应用程序时,我停留在主页选项卡上,而未到达登录页面,并且无法注销。我该怎么解决?
这是我的用户供稿,其中包含uid和postId。这四个postId来自两个uid,但是我只能获取currentUid的帖子。我要提取的代码是:
static func fetchUser(with uid: String, completion: @escaping (User) -> ()) {
USER_REF.child(uid).observeSingleEvent(of: .value) { (snapshot) in
guard let userDictionary = snapshot.value as? Dictionary<String, AnyObject> else { return }
let user = User(uid: uid, dictionary: userDictionary)
completion(user)
}
}
static func fetchPost(with postId: String, completion: @escaping (Post) -> ()) {
POSTS_REF.child(postId).observeSingleEvent(of: .value) { (snapshot) in
guard let postDictionary = snapshot.value as? Dictionary<String, AnyObject> else { return }
guard let ownerUid = postDictionary["ownerUid"] as? String else {return}
self.fetchUser(with: ownerUid, completion: { (user) in
var post = Post(user: user, dictionary: postDictionary)
post.postId = postId
//... ...
我在feedController上获取帖子的代码是:
guard let currentUid = Auth.auth().currentUser?.uid else {return}
//USER_FEED_REF points to "user-feed"
USER_FEED_REF.child(currentUid).queryLimited(toLast: 3).observeSingleEvent(of: .value, with: {(snapshot) in
self.collectionView.refreshControl?.endRefreshing()
guard let allObjects = snapshot.children.allObjects as? [DataSnapshot] else {return}
allObjects.forEach({ (snapshot) in
print(snapshot) //only currentUid's postId shown
let postId = snapshot.key
Database.fetchPost(with: postId, completion: {(post) in
self.posts.append(post)
//... ...
上周尝试获取时,我从“ user-feed”下的所有uid下获取了所有帖子(请参见上图),但是,当我在新数据库中尝试该应用程序时,我只能获取currentUid的帖子。
对于删除用户数据库后的冻结应用程序,我在退出应用程序之前先删除了currentUid的数据库(例如,包含profileImageUrl,用户名等的“用户”节点)。当我重建应用程序时,我直接进入首页而不是登录页面。由于没有可用的用户数据,用户名,图像未显示,因此我无法注销。