I have two view controllers and I am trying to pass data from one to the other. The data is returned from an MKLocalSearch closure. But I cannot seem to get my delegate method to run. I hope that someone can shed some light on this? I mocked up a smaller version of what I'm trying to do. Also, I don't use storyboards. I code up everything. Here is the code...
import UIKit
import MapKit
protocol SendDataDelegate {
func sendData(data: String)
}
class OneViewController: UIViewController {
var delegate: SendDataDelegate?
override func viewDidLoad() {
super.viewDidLoad()
doSearch() { coord in
if let coord = coord {
//When the execution gets here, coord does have
//the values to be sent to the nexr view controller.
self.delegate?.sendData(data: "\(coord)")
let twoViewController = TwoViewController()
self.present(twoViewController, animated: true)
}
}
}
func doSearch(completion: @escaping (CLLocationCoordinate2D?) -> Void) {
var coord: CLLocationCoordinate2D?
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = "New York"
let search = MKLocalSearch(request: request)
search.start(completionHandler: {(response, error) in
if error != nil {
print("Error occured in search:\(error!.localizedDescription)")
} else if response!.mapItems.count == 0 {
print("No matches found")
} else {
print("Matches found")
coord = response?.mapItems[0].placemark.coordinate
}
completion(coord)
})
}
}
import UIKit
class TwoViewController: UIViewController, SendDataDelegate {
var myData: String = ""
var oneViewController = OneViewController()
override func viewDidLoad() {
super.viewDidLoad()
oneViewController.delegate = self
}
func sendData(data: String) {
myData = data
print ("myData: \(myData)")
}
}