title: Swift Using NotificationCenter to Pass Data Between View Controllers
body: <p>I am trying to pass the data of user-input coordinates from one VC to another using Notifications. When I run the code, it does not add an annotation onto the MapView, so I have a hunch I may have not set up the notification to send with the inputted coordinates properly, but I am not sure where I have went wrong.</p>
  
  <p>Class file that takes the input of coordinates:</p>
  
  <pre><code>import UIKit
  import CoreLocation
  
  var locations: [Dictionary&lt;String, Any&gt;] = [] // here I initialize my empty array of locations
  
  class OtherVC: UIViewController {
  
      @IBOutlet weak var latitudeField: UITextField!
      @IBOutlet weak var longitudeField: UITextField!
  
      @IBOutlet weak var titleTextField: UITextField!
      var coordinates = [CLLocationCoordinate2D]()
  
      override func viewDidLoad() {
          super.viewDidLoad()
      }
  
  
  
  
      @IBAction func addToMap(_ sender: Any) {
          let lat = latitudeField.text!
          let long = longitudeField.text!
          let title = titleTextField.text!
          var location: [String: Any] = ["title": title, "latitude": lat, "longitude": long]
          locations.append(location) 
          NotificationCenter.default.post(name: NSNotification.Name("MapViewController.coordinate.updated"), object: locations, userInfo: nil)
  
      }
  
  
  } 
  </code></pre>
  
  <p>Class file that receives notification and places annotation:</p>
  
  <pre><code>import UIKit
  import MapKit
  class MapViewController: UIViewController, MKMapViewDelegate {
  
  
      @IBOutlet weak var mapView: MKMapView!
  
  
  
      override func viewDidLoad() {
          super.viewDidLoad()
          mapView.delegate = self
      }
  
      func add(notification: NSNotification) {
  
          let dict = notification.object as! NSDictionary
  
          // takes the coordinates from the notification and converts such that the map can interpret them
          let momentaryLat = (dict["latitude"] as! NSString).doubleValue
          let momentaryLong = (dict["longitude"] as! NSString).doubleValue
          let annotation = MKPointAnnotation()
          annotation.title = dict["title"] as? String
          annotation.coordinate = CLLocationCoordinate2D(latitude: momentaryLat as CLLocationDegrees, longitude: momentaryLong as CLLocationDegrees)
          mapView.addAnnotation(annotation)
          self.mapView.centerCoordinate = annotation.coordinate
      }
  
  
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
          // Dispose of any resources that can be recreated.
      }
  
      func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -&gt; MKAnnotationView? {
          let identifier = "pinAnnotation"
          var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKPinAnnotationView
  
      if annotationView == nil {
          annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
          annotationView?.canShowCallout = true
      }
  
      annotationView?.annotation = annotation
      return annotationView
      }
  } 
  </code></pre>