Probably this is not the right way to pass data back the the previous view controller. Although there are other options that you can follow to achieve the desired functionality, I would recommend to follow the Delegation pattern approach.
For your case, you could do it like this -for instance-:
According to "How to Apply Delegation?" section in this answer, the first thing that we should do is to implement the needed protocol:
protocol SaveViewControllerDelegate: class {
// I assumed that 'listArray' is an array of strings, change it to the desired type...
func saveViewControllerWillDisappear(_ listArray: [String], viewController: UIViewController)
}
Thus in SaveViewController
, you should create -weak- instance of SaveViewControllerDelegate
and call its method at for the desired behavior:
class SaveViewController: UIViewController {
weak var delegate: SaveViewControllerDelegate? = nil
var listArray: [String]!
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// assuming that you already did the required update to 'listArray'
// you would need to pass it here:
delegate?.saveViewControllerWillDisappear(listArray, viewController: self)
}
}
So far we added the necessary code for the SaveViewController
, let's jump the the MasterViewController
(first view controller):
Next, you would need to conform to SaveViewControllerDelegate
, Connecting the delegate object and implement its method (steps from 2 to 4 in the mentioned answer):
class MasterViewController: UIViewController, SaveViewControllerDelegate {
var listArray: [String]!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let toViewController = segue.destination as! SaveViewController
// make sure to add this:
toViewController.delegate = self
toViewController.listArray = self.listArray
}
func saveViewControllerWillDisappear(_ listArray: [String], viewController: UIViewController) {
print("here is my updated array list: \(listArray)")
}
}
At this point, saveViewControllerWillDisappear
method should be get called when coming back from SaveViewController
, including listArray
as a parameter.
Aside note:
The reason of the error that you are facing is that you are declaring masterView
as UIViewController
, what you should do instead is:
var masterView:MasterViewController!
HOWEVER keep in mind that this approach still -as I mentioned before- inappropriate one.