I want to pass data from first table view controller to second table view controller. I using this code to do it:
first view controller:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let detailViewController = DetailViewController()
detailViewController.index = indexPath.row + 1
print(detailViewController.index) // get correct indexPath.row
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
self.navigationController?.pushViewController(DetailViewController(), animated: true)
}
second view controller:
var index = Int()
override func viewDidLoad() {
super.viewDidLoad()
print(index) // get nil
}
Why this happens and how to fix it?
>Solution :
You’re creating two instances of DetailViewController, separately.
//This one with a valid index
let detailViewController = DetailViewController()
detailViewController.index = indexPath.row + 1
//This one without an index
self.navigationController?.pushViewController(DetailViewController(), animated: true)
You should pass the first one into .pushViewController like this:
self.navigationController?.pushViewController(detailViewController, animated: true)