TableCell 转为 mapkit
Posted
技术标签:
【中文标题】TableCell 转为 mapkit【英文标题】:TableCell segue to mapkit 【发布时间】:2018-09-05 23:18:12 【问题描述】:我正在尝试使用 segue 将注释传递给 mapkit,但是当我测试它时总是出现致命错误:Unexpectedly found nil while unwrapping an Optional value annotation is not a nil obj but mapView is
tableView 控制器中的 segue 代码
if segue.identifier == "FocusOn"
let path = tableView.indexPathForSelectedRow
let controller = segue.destination as! MapViewController
let animal = animalList[(path?.row)!]
let annotationFocus = FencedAnnotation(newTitle: animal.name!, newSubtitle: animal.animaldescription!, lat: animal.latitude, long: animal.longtitude, newType: animal.type!, newPhoto: animal.photo!)
controller.addAnnotation(annotation: annotationFocus)
地图视图控制器中的功能
func addAnnotation(annotation: FencedAnnotation)
self.mapView.addAnnotation(annotation)
self.mapView.delegate = self
【问题讨论】:
segue是从table cell到mapviewcontroller 【参考方案1】:我认为这是因为在 segue 完成之前没有调用 viewDidLoad
。
为此,请不要在您的tableViewController
中调用addAnnotation
,而是将注释直接发送到您的mapViewController
并在viewDidAppear
或viewDidLoad
中调用addAnnotation
。
在你的mapViewController
你需要
var annotation: FencedAnnotation!
在您的tableViewController
中将注释发送到mapViewController
喜欢
let annotationFocus = FencedAnnotation(newTitle: animal.name!, newSubtitle: animal.animaldescription!, lat: animal.latitude, long: animal.longtitude, newType: animal.type!, newPhoto: animal.photo!)
controller.annotation = annotationFocus
并在viewDidAppear
中致电addAnnotation
喜欢
override func viewDidAppear(_ animated: Bool)
addAnnotation(annotation)
【讨论】:
【参考方案2】:根据您的解释,我无法了解全部情况,但我会尽力回答您。我建议在 MapViewController 中设置一个名为 annotation 的变量。然后在您的覆盖 func prepare() 代码中,您应该将该变量设置为 annotationFocus。这听起来可能有点令人困惑,但请尝试将这段代码放入您的 tableViewController。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "FocusOn"
if let controller = segue.destination as? MapViewController
let path = tableView.indexPathForSelectedRow
let animal = animalList[(path?.row)!]
let annotationFocus = FencedAnnotation(newTitle: animal.name!, newSubtitle: animal.animaldescription!, lat: animal.latitude, long: animal.longtitude, newType: animal.type!, newPhoto: animal.photo!)
controller.annotation = annotationFocus
然后,我会把它放到你的 mapViewController 中
var annotation = FencedAnnotation()
func addAnnotation()
self.mapView.addAnnotation(annotation)
self.mapView.delegate = self
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
addAnnotation()
当您执行 segue 时,mapViewController 中的注释会设置为 annotationFocus。这就是执行 addAnnotation() 时不需要参数的原因。我希望这行得通。
【讨论】:
我试过了,但是当我点击单元格时,应用程序崩溃并显示错误:thread1 :signal SIGABRT 也许改变 override func viewDidLoad() 来覆盖 func viewWillAppear()以上是关于TableCell 转为 mapkit的主要内容,如果未能解决你的问题,请参考以下文章
C# DataSet转为word 急用! 我把xml文件转为DataSet了,现在需要把DataSet转为Word导出。