Ich versuche, den Namen eines Map-Pins in einer Variablen zu speichern, und zeige ihn dann auf einem Etikett auf meinem zweiten VC an.Swift: Daten werden nicht in Variablen gespeichert, wenn VC übergeben wird.
Derzeit ist das, was ich habe.
FirstVC.swift
//Perform segue when callout has been tapped
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
self.performSegue(withIdentifier: "showAnnotationInfo", sender:view)
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
print("Annotation selected")
if let annotation = view.annotation as? POIAnnotations {
print("Your annotation title is: \(annotation.title!)")
// Instantiate ShopDetailViewController
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let destVC = storyboard.instantiateViewController(withIdentifier: "shopDetailVC") as! ShopDetailViewController
destVC.shopNameData = annotation.title!
print("Shop name data has the value: \(destVC.shopNameData)")
}
}
ShopDetailViewController.swift
class ShopDetailViewController: UIViewController {
@IBOutlet weak var shopName: UILabel!
var shopNameData = "data"
override func viewDidLoad() {
super.viewDidLoad()
self.shopName.text = self.shopNameData
print(shopNameData)
}
}
Was geschieht, wenn ich zu speichern annotation.title
in shopNameData
versuchen, ist es kein Problem. Wenn ich auf die Annotation klicke, werden die Daten von annotation.title
nicht länger in shopNameData
gespeichert und zeigen einfach die Standarddaten an.
Ich bin mir nicht sicher, wo ich hier falsch gegangen.
EDIT
ich eingeschlossen habe, wo ich ShopDetailViewController
präsentieren.
Es gibt keinen Code der Navigation oder Gegenwart? –
Wie präsentieren Sie 'ShopDetailViewController'? ein Sotryboard-Segment von IB oder performSegue vom Code? –
@WarifAkhandRishi überprüfen bearbeiten. – daanyyaal