Swift 通过NavigationConrtoller将tableViewCell数据从A->;传递给其子级;至B->&;到C,使用segue Forward
当我从TabeView单元格传递数据时会发生此错误,数据可以在多个NavigationController子项中读取和使用,我已使用segues传递数据,在第二个viewController中成功,当prfomSegue到第三个viewControllerSwift 通过NavigationConrtoller将tableViewCell数据从A->;传递给其子级;至B->&;到C,使用segue Forward,swift,xcode,google-maps,uitableview,Swift,Xcode,Google Maps,Uitableview,当我从TabeView单元格传递数据时会发生此错误,数据可以在多个NavigationController子项中读取和使用,我已使用segues传递数据,在第二个viewController中成功,当prfomSegue到第三个viewController线程1时,应用程序崩溃:致命错误:在展开可选值时意外发现nil tableViewCell包含以下数据 struct storesData { var area: String var title: String var
线程1时,应用程序崩溃:致命错误:在展开可选值时意外发现nil
tableViewCell包含以下数据
struct storesData {
var area: String
var title: String
var latitude: Double
var longitued: Double
static func getAllStores()-> [storesData]{
return [
storesData(area: "الخرطوم", title: "KFC", latitude: 15.581010, longitued: 32.569032),
]
}
}
这就是我传递数据的方式
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destVC = segue.destination as? Order {
destVC.stores = sender as? storesData
} else if let destVC = segue.destination as? GoogleMap {
destVC.stores = sender as? storesData
}
在第二个视图控制器中,我在一个名为stores的变量中获取storeData的值,导航标题将在customCell中具有标题,它确实工作正常
var stores: storesData?
override func viewDidLoad() {
super.viewDidLoad()
title = stores?.title
}
这就是错误出现的地方。我抓取的最后一个数据是第三个viewCotroller中类型Double的经度和纬度,以及我使用的带有mapView的视图控制器(谷歌地图)
编译器显示此错误
Fatal error: Unexpectedly found nil while unwrapping an Optional value: file /Users/mazenqp/Downloads/DELEVARE - ديليفري/DELEVARE - ديليفري/UserinterFace/GoogleMap.swift, line 239
2020-06-07 18:17:35.717618+0200 DELEVARE - ديليفري[17147:915821] Fatal error: Unexpectedly found nil while unwrapping an Optional value: file /Users/mazenqp/Downloads/DELEVARE - ديليفري/DELEVARE - ديليفري/UserinterFace/GoogleMap.swift, line 239
(lldb)
在搜索和搜索之后,我找到了一个答案,它确实涵盖了大多数情况,我只需要将first view控制器中的prepare(for:sender)更改为这样
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let destVc = segue.destination as? Order,
let index = storesTV.indexPathForSelectedRow?.row
else{return}
destVc.stores = stores[index]
}
数据成功地传递到第二个VC(订单),我在订单VC中编写了另一个prepare(for:sender)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destVc = segue.destination as? GoogleMap{
destVc.stores = stores
}
}
这是一张显示数据被传递到第三个VC(谷歌地图)的图像,
第二个和第三个Vc都来自一个navigationController,
你可以在这篇文章中找到答案
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destVc = segue.destination as? GoogleMap{
destVc.stores = stores
}
}