Как удалить дочерний узел firebase из определенного UICollectionViewCell - Swift - PullRequest
0 голосов
/ 31 октября 2018

У меня есть UICollectionView, который выглядит как это изображение и имеет следующую структуру данных в Firebase .

Я бы хотел, чтобы пользователь мог удалять отдельные записи из представления коллекции, а затем из базы Firebase. Я видел в других сообщениях stackoverflow, которые говорят, что я должен использовать .removeValue из firebase, но не знает, как получить ссылку на случайного потомка, чтобы удалить его .

Как мне получить доступ к значению autoId из каждого сообщения, например, "LPmNrvzu-aXsw_u-rEF", чтобы я мог удалить этот дочерний узел из Firebase?

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

 @objc func observeUserPosts() {
    let uid = Auth.auth().currentUser?.uid
    let postsRef = Database.database().reference().child("posts").queryOrdered(byChild: "author/userid")
    postsRef.queryEqual(toValue: uid!).observe(.value) { (snapshot) in

    }
}

Это расширение, куда я загружаю весь код UICollectionView

    //extension - UICollectionView for user's posts

extension ProfileViewController: UICollectionViewDataSource,UICollectionViewDelegate {


    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return postsuser.count

    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell: PostsCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "postsCell", for: indexPath) as! PostsCollectionViewCell

        cell.set(post: postsuser[indexPath.row])
        cell.deletePostButton.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        cell.deletePostButton.tag = indexPath.row
        return cell
    }

    @objc func buttonAction(sender: UIButton) {

  Database.database().reference().child("posts").queryOrdered(byChild: "author/userid").observe(.value) { (snapshot) in
            if let posts = snapshot.value as? [String: AnyObject] {
                for (key, _) in posts {

                // NOW HOW DO I REFERENCE THE CELL THAT THE USER CLICKS TO DELETE?
                }
            }
        }

//        postsuser[sender.tag]

    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

        let vc = storyboard?.instantiateViewController(withIdentifier: "profileUsersSelectedPostViewController") as? ProfileUsersSelectedPostViewController
        self.navigationController?.pushViewController(vc!, animated: true)
        vc?.selectedpostsuser = postsuser[indexPath.row]

    }


}

1 Ответ

0 голосов
/ 02 ноября 2018

Вот так мне удалось решить вопрос, который я задал .... надеюсь, это поможет:)

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell: PostsCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "postsCell", for: indexPath) as! PostsCollectionViewCell

    cell.set(post: postsuser[indexPath.row])
    cell.deletePostButton.addTarget(self, action: #selector(buttonAction(sender:)), for: .touchUpInside)
    cell.deletePostButton.tag = indexPath.row
    return cell
}

@objc func buttonAction(sender: UIButton) {

   ProgressHUD.show("Un momento", interaction: true)
    let uid = Auth.auth().currentUser?.uid
    Database.database().reference().child("posts").queryOrdered(byChild: "author/userid").queryEqual(toValue: uid!).observe(.value) { (snapshot) in
        if let posts = snapshot.value as? [String: AnyObject] {
            if let posts = snapshot.value as? [String: AnyObject] {
                for (key, postReference) in posts {
                    if let post = postReference as? [String: Any], let timestamp = post["timestamp"] as? TimeInterval, timestamp == self.postsuser[sender.tag].timestampDouble {

                        Database.database().reference().child("posts").child(key).removeValue(completionBlock: { (error, _) in
                            DispatchQueue.main.async {
                                ProgressHUD.showSuccess("Tu imagen ha sido borrada...")
                                self.postsuser.remove(at: sender.tag)
                                self.postsCollectionView.reloadData()
                                self.refresher.endRefreshing()
                            }
                        })
                    }
                }
        }
    }
}
}
...