gpt4 book ai didi

ios - Swift:通过 VC 传递时数据未存储在变量中

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:20 25 4
gpt4 key购买 nike

我试图将 map 图钉的名称存储在一个变量中,然后将其显示在我的第二个 VC 的标签上。

目前,这就是我所拥有的。

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)

}

}

发生的事情是,当我尝试将 annotation.title 存储在 shopNameData 中时,没有问题。

但是,当我点击注释时,annotation.title 中的数据不再存储在 shopNameData 中,而是只显示默认数据。

enter image description here

我不确定这里哪里出了问题。

编辑

我在显示 ShopDetailViewController 的位置包含了内容。

最佳答案

您只是创建了一个 ShopDetailViewController 实例,设置了值,然后什么都不做。您创建的 ShopDetailViewController 实例超出范围并被释放。

您如何呈现 ShopDetailViewController?你在使用segue吗?如果你是那么你应该覆盖 prepareForSegue() 方法,你将在其中获得 ShopDetailViewController 的实例化版本,它将被呈现并且不会超出范围,然后简单地设置那里的 shopNameData 属性。

编辑:

感谢您阐明呈现 View Controller 的方式。所以回答你的评论:

您需要转到 FirstVC 并添加类似以下代码的内容:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

if let viewController = segue.destination as? ShopDetailViewController,
let annotationView = sender as? MKAnnotationView,
let annotation = annotationView.annotation as? POIAnnotations {

viewController.shopNameData = annotation.title
}
}

之后,您只需删除 func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 方法中的代码,并将代码保留在您的 func mapView(_ mapView: MKMapView、annotationView View :MKAnnotationView、calloutAccessoryControlTapped控件:UIControl)方法。

通过这种方式,您只需调用 present 并作为发送者传递 MKAnnotationView,然后在 segue 准备呈现您的 View Controller 时提取相关信息。我希望这是有道理的。

关于ios - Swift:通过 VC 传递时数据未存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41281800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com