Error passing data to tableViewController

Asked

Viewed 56 times

1

Oops! Guys, I have a problem, I’m making an app that consumes a themoviedb api and saves the movies in the Realm. On the main screen I’m using the Collectionviewcontroller, and when touching the film it goes for part of details. However when it goes for details nothing appears and when I select another movie it brings the previous movie.

Home:

import UIKit
import RealmSwift

class HomeViewController: UIViewController,UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout, UISearchBarDelegate {


@IBOutlet weak var searchbar: UISearchBar!

@IBOutlet weak var ListOfMovies: UICollectionView!

//MARK: - Variables
var movies : Results<Moviess>!
let realm = try! Realm()
var detailsMovies = Moviess()

override func viewDidLoad() {
    super.viewDidLoad()
    print(Realm.Configuration.defaultConfiguration.fileURL!)
    ListOfMovies.delegate = self
    ListOfMovies.dataSource = self
    searchbar.delegate = self
    movies = realm.objects(Moviess.self)
    getRequest()
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

}

func getObjects(filter: String) -> Results<Moviess>{
    movies = realm.objects(Moviess.self).filter("title CONTAINS[cd] %@",filter)
    return movies
}


func getRequest(){
    print(movies.count)
    if movies.count < 1 {
        RequestData.requisicao { (result) in
               switch(result){
               case .success(let detalhe):
                self.ListOfMovies.reloadData()
               print(detalhe)
               case .failure(let error):
                   print(error)
               }
           }
    }}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return movies.count
  }

  func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "listOfMovies", for: indexPath) as! HomeCollectionViewCell
    let infos = movies[indexPath.item]
    cell.configurationMovie(movie: infos)
    return cell
  }
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    detailsMovies = movies[indexPath.row]
}


  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
      return UIDevice.current.userInterfaceIdiom == .phone ? CGSize(width: collectionView.bounds.width/2-20, height: 200) : CGSize(width: collectionView.bounds.width/3-20, height: 250)
  }

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    print(searchText)
    if !searchText.isEmpty{
        let filtro = getObjects(filter: searchText)
        print(filtro)
        ListOfMovies.reloadData()
    }else{
        movies = realm.objects(Moviess.self)
        ListOfMovies.reloadData()
    }
}

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if(segue.identifier == "details")
           {
             let viewController = segue.destination as! DetailViewController
            print(detailsMovies)
             viewController.conta = detailsMovies
           }

        }

}

Details:

import UIKit
import RealmSwift

class DetailViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{

var conta: Moviess!
let realm = try! Realm()

@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    tableView.reloadData()

}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return [conta].count
 }

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "details", for: indexPath) as! DetailsTableViewCell


    let infos = [conta][indexPath.item]

    cell.prepare(movie: infos!)
    return cell
}    

}

I don’t know where I could be going wrong...

Qwho want to take a closer look

  • In function prepare(for segue:, sender: ) , the print(detailsMovies) is printing something? If not printing, you have checked if the following name is "details" even?

  • Face only one doubt for me to be able to help you. You are using which structure?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.