Saturday, 2 March 2019

Pass coredata to ViewController based on cell selection

I need to present a new ViewController when selecting a UICollectionView Cell and pass the data from the entity used to fill selected cell.

Here is the code used to fill cell data:

   let pets = PersistenceManager.shared.fetch(Pet.self)
     var _fetchResultsController: NSFetchedResultsController <Pet>?
    var fetchResultsController: NSFetchedResultsController <Pet>?{
        get{
            if _fetchResultsController == nil {

                let moc = PersistenceManager.shared.context
                moc.performAndWait {
                    let fetchRequest = PersistenceManager.shared.petsFetchRequest()
                    _fetchResultsController = NSFetchedResultsController.init(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: nil) as? NSFetchedResultsController<Pet>
                    _fetchResultsController?.delegate = self
                    do {
                        try self._fetchResultsController?.performFetch()
                    }catch {
                    }
                }
            }
            return _fetchResultsController
        }
    }

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

        if let pet= self.fetchResultsController?.fetchedObjects, indexPath.row < pet.count{
            let _pet= fetchResultsController!.object(at: indexPath)
// cell UI goes here
        }
        return cell
    }

I understand I need to use didSelectItemAt, I just don't know what information needs to go in the function. Please let me know of anything else needed to better help answer this question. Thank you.

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

// Added the line below based on karthik's answer. But I am unsure how to implement it.
    let selectedObj = fetchResultsController!.object(at: indexPath)

    let vc = self.storyboard?.instantiateViewController(withIdentifier: "selectedPetViewController") as! PRSelectedPetViewController

    navigationController?.pushViewController(vc, animated: true)

}



from Pass coredata to ViewController based on cell selection

No comments:

Post a Comment