Firebase使用相同的代码获取不同的结果

时间:2019-01-09 04:45:11

标签: swift firebase

我是Firebase的新手,在清理构建文件夹之前和之后,我都经历了不同的获取结果。我想知道用相同的代码获得不同的结果是否普遍?此外,从Firebase的数据库中删除节点后,我的应用仍会获取已删除的帖子。我该如何解决这个问题?

我发现,如果不注销用户帐户,则会删除该用户的数据库。重新加载应用程序时,我停留在主页选项卡上,而未到达登录页面,并且无法注销。我该怎么解决?

编辑(添加代码和图片): user-feed -> uid -> postId

这是我的用户供稿,其中包含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,用户名等的“用户”节点)。当我重建应用程序时,我直接进入首页而不是登录页面。由于没有可用的用户数据,用户名,图像未显示,因此我无法注销。

0 个答案:

没有答案