Как передать данные, используя сбор / просмотр? - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь выяснить, как успешно передать данные, когда ячейка представления коллекции выбрана, другому контроллеру представления через segue. Когда я выбираю ячейку, я получаю крэ sh. Я не сталкивался с представлением коллекции прежде. Правильно ли я подготавливаю сеуг до того, как подготовлю его? Я получаю крэ sh, когда выбираю ячейку. Мои данные возвращаются ноль. Если я пу sh контроллер представления, он работает нормально.

// Root view controller, contains collection view that holds different categories. When cell is selected, it should take user to n
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "pushToPosts" {

        let vc = segue.destination as? ExplorePostsVC
        if let cell = sender as? UICollectionViewCell, let indexPath = collectionView.indexPath(for: cell) {
        switch selectedSegmentIndex {
            case 0: vc?.style = femaleStyles[indexPath.row]
            case 1: vc?.style = maleStyles[indexPath.row]
                default: break

                }

            }

    }


    }


func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
 self.performSegue(withIdentifier: "pushToPosts", sender: self)

    }

Когда я выбираю ячейку, я получаю фатальную ошибку. Все данные возвращают ноль в следующем контроллере представления.


// ExplorePostsVC

 // To pass images and label
    var styleName = ""
    var styleDetails = ""
    var styleImage: UIImage?
    var style: Style!
    var headerView: ExplorePostHeader?
    override func viewDidLoad() {
    super.viewDidLoad()

fetchPosts()
    navigationController?.navigationBar.prefersLargeTitles = false
    navigationController?.navigationItem.largeTitleDisplayMode = .never
    collectionView.delegate = self
    collectionView.dataSource = self


    }

// Fetch posts based on selected cell

    func fetchPosts() {


 self.styleDetails = style.details //Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
 self.styleName = style.name
 switch style.gender {

        case.female:

        FEMALE_STYLES_REF.child((style.childValue)).observe(.childAdded) { (snapshot) in
        let postId = snapshot.key
        Database.fetchPost(with: postId, completion: { (post) in
        self.posts.append(post)
        self.posts.sort(by: { (post1, post2) -> Bool in
        return post1.creationDate > post2.creationDate

        })

        self.collectionView?.reloadData()


                })

            }


        case .male:

        MALE_STYLES_REF.child((style.childValue)).observe(.childAdded) { (snapshot) in
        let postId = snapshot.key
        Database.fetchPost(with: postId, completion: { (post) in
        self.posts.append(post)
        self.posts.sort(by: { (post1, post2) -> Bool in
        return post1.creationDate > post2.creationDate
        })
        self.collectionView?.reloadData()

        })

            }

        }
  }

1 Ответ

0 голосов
/ 09 апреля 2020

Вы должны использовать что-то подобное в вашем didSelectItemAt методе

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

    if let cell = collectionView.cellForItem(at: indexPath) {
        self.performSegue(withIdentifier: "pushToPosts", sender: cell)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...