Не могу получить SavedPost - PullRequest
       3

Не могу получить SavedPost

0 голосов
/ 20 декабря 2018

В моем приложении есть возможность сохранять сообщения, которые пользователи смогут просматривать позже.Код:

func savedPost(for cell: FirstView) {

    guard let indexPath = collectionView.indexPath(for: cell) else { return }
    var post = self.posts[indexPath.item]

    guard let currentuserId = Auth.auth().currentUser?.uid else { return }
    let targetUid = post.user.uid

    guard let postId = post.id else { return }

    let ref = Database.database().reference().child("save_post").child(currentuserId).child(postId)

    if post.hasSaved {

        ref.removeValue { (err, _) in

            if let _ = err {
                showErr(info: NSLocalizedString("failtoUnsave", comment: ""), subInfo: tryLater)
                return
            }

            post.hasSaved = false
            self.posts[indexPath.item] = post
            self.collectionView.reloadItems(at: [indexPath])
        }

    } else {

        let values = ["userId": targetUid]

        ref.updateChildValues(values) { (err, ref) in

            if let _ = err {
                showErr(info: NSLocalizedString("failtoSave", comment: ""), subInfo: tryLater)
            }

            post.hasSaved = true
            self.posts[indexPath.item] = post
            self.collectionView.reloadItems(at: [indexPath])
        }
    }
}

С этим кодом моя база данных firebase в "save_post" имеет -> currentUseruId -> postid -> postUserId.На ProfileController пользователи могут просматривать сохраненные сообщения с вкладки «сохраненные сообщения».Код:

var savedPosts = [Post]()

fileprivate func fetchSaved() {

    var userIds = [String]()
    var postIds = [String]()

    guard let uid = self.user?.uid else { return }

    let getIDsRef = Database.database().reference().child("save_post").child(uid)
    let query = getIDsRef.queryOrderedByKey()

    query.observeSingleEvent(of: .value) { (snapshot) in

        let dictionary = snapshot.value as? [String: Any]

        dictionary?.forEach({ (key,value) in

            guard let dic = value as? [String: String] else { return }

            postIds.append(key)
            userIds.append(dic["userId"] ?? "")
        })

        var i = 0

        while i < userIds.count {
            self.fetchPostsWithUserIDPostID(userID: userIds[i], postID: postIds[i])
            i += 1
        }
    }
}

fileprivate func fetchPostsWithUserIDPostID(userID: String, postID: String) {

    let getPostRef = Database.database().reference().child("video_list")

    getPostRef.child(userID).child(postID).observeSingleEvent(of: .value, with: { (snapshot) in

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

        let ref = Database.database().reference().child("users").child(userID)

        ref.observeSingleEvent(of: .value, with: { (snapshot) in

            guard let dict = snapshot.value as? [String: Any] else { return }

            let user = User(uid: userID, dictionary: dict)
            var post = Post(user: user, dictionary: dictionary)
            post.id = postID

            guard let currentUserUID = Auth.auth().currentUser?.uid else { return }
            Database.database().reference().child("likes").child(postID).child(currentUserUID).observeSingleEvent(of: .value, with: { (snapshot) in

                if let value = snapshot.value as? Int, value == 1 {
                    post.hasLiked = true
                } else {
                    post.hasLiked = false
                }

                post.hasSaved = true

                self.savedPosts.append(post)
                self.savedPosts.sort(by: { (p1, p2) -> Bool in
                    return p1.creationDate.compare(p2.creationDate) == .orderedDescending
                })

                self.collectionView.reloadData()
            })
        })
    })
}

Однако, когда я нажимаю на вкладку «сохраненный пост», сообщение не отображается.Я не знаю, где моя ошибка.У меня есть весь необходимый код под все переопределить func collectionView (....).Я считаю, что ошибка должна исходить из кода, указанного выше.Я искренне ищу помощи, чтобы решить эту проблему.Спасибо.

1 Ответ

0 голосов
/ 21 декабря 2018

Здесь может происходить множество вещей.Было бы хорошо добавить туда несколько операторов print, чтобы убедиться, что 1) данные, которые вы возвращаете из базы данных, выглядят так, как вы ожидаете, и 2) что вы правильно анализируете их в Post объектах.Правильно ли определены ваши клетки для вашего CollectionView?Кроме того, я не вижу, где вы определяете источник данных для CollectionView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...