【发布时间】:2020-09-04 10:41:05
【问题描述】:
这是我的主要UITableViewController 中的代码块,类为InventoryTableViewController
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
switch segue.identifier! {
case "detailSegue":
guard let inventoryDetail = segue.destination as? InventoryDetailView else {
fatalError("Unexpected destination: \(segue.destination)")
}
guard let selectedVehicleCell = sender as? InventoryTableViewCell else {
fatalError("Unexpected sender: \(String(describing: sender))")
}
guard let indexPath = tableView.indexPath(for: selectedVehicleCell) else {
fatalError("The selected cell is not being displayed by the table")
}
let selectedVehicle = vehicles[indexPath.row]
inventoryDetail.vehicle = selectedVehicle as? InventoryDetailView.Inventory
printGenericInfo(selectedVehicle)
default:
fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))")
}
}
func printGenericInfo<T>(_ value: T) {
let t = type(of: value as Any)
print("'\(value)' of type '\(t)'")
}
我正在尝试传递 selectedVehicle。当我打印值和类型时,它如下(并且是正确的):
Inventory(id: 1004, year: "2014", make: "MakeWith15Chars", model: “ModelWith15Char”,主体:“BodyWith15Chars”,内部:“Hickory”, 外观:“磁性灰色”,VIN:“2C4RDGCG0FR805928”,里程:“10450”, msrp: "33,800.00", cost: "28,100.00") 库存类型
我InventoryDetailView中的代码块如下:
class InventoryDetailView: UIViewController {
var vehicle: Inventory!
struct Inventory: Hashable, Codable, Identifiable {
var id: Int
var year: String
var make: String
var model: String
var body: String
var interior: String
var exterior: String
var vin: String
var miles: String
var msrp: String
var cost: String
}
override func viewDidLoad() {
super.viewDidLoad()
yearMakeLabel.text = vehicle?.year
}
}
当我在 InventoryDetailView 中打印车辆的值为 nil 时。为什么?我做错了什么?
【问题讨论】:
-
您是否从 UITableViewCell 而不是 UITableView 连接 segue?你能检查一下哪个是第一个被调用的吗?
viewDidLoad()的InventoryDetailView或prepare(for:sender)的InventoryTableViewController。 -
segue 肯定来自 UITableViewCell
-
尝试删除segue,然后将其从
InventoryTableViewController重做为InventoryDetailView。 -
顺序是先prepare(for:sender)再viewDidLoad()
-
我改变了segue。还是没有
标签: ios swift uitableview uiviewcontroller