我试图从具有一个值"楼层号"的表格视图单元格执行segue。到另一个用于分配每层楼房间数量的vc。我在整个函数中都有断点来验证传递的值是否为零。关键是它不是零,它的值是#34;楼层数"。当我尝试将该值分配给下一个VC中的变量时,我得到unwrapping可选的nil错误。有人可以帮我解决这个问题吗,因为我不知道这是从哪里来的,调试器告诉我,我想要传递的变量中有一个值。代码清单如下。谢谢你:
class AssignNumberOfRoomsForFloorsVC: UITableViewController {
//MARK: - Properties
private var managedObjectContext: NSManagedObjectContext!
private var storedFloors = [Floors]()
//MARK: - Actions
override func viewDidLoad() {
super.viewDidLoad()
managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
loadFloorData()
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
private func loadFloorData() {
let request: NSFetchRequest<Floors> = Floors.fetchRequest()
request.returnsObjectsAsFaults = false
do {
storedFloors = try managedObjectContext.fetch(request)
}
catch {
print("could not load data from core \(error.localizedDescription)")
}
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return storedFloors.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "floor cell", for: indexPath) as! FloorCell
let floorItem = storedFloors[indexPath.row]
cell.floorNumberTxt.text = String(floorItem.floorNumber)
return cell
}
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var selectedRow = self.tableView.indexPathForSelectedRow
let floorItem = storedFloors[(selectedRow?.row)!]
let destinationController = segue.destination
if let assignRoomsVC = destinationController as? DeclareRoomsVC {
if let identifier = segue.identifier {
switch identifier {
case "assign number of rooms":
assignRoomsVC.floorNumberTxt.text = String(floorItem.floorNumber) // ERROR HAPPENS ON THIS LINE
assignRoomsVC.selectedFloor = floorItem.floorNumber
default: break
}
}
}
}
}
答案 0 :(得分:2)
在准备segue方法时,视图尚未加载,因此您的故事板尚未创建任何视图。
看起来floorNumberTxt
可能是文本字段或标签。您正在尝试分配此视图的属性,但该视图尚不存在。因此,“在展开可选值时找到nil”错误消息。
在分配任何视图控制器的视图属性之前,尝试添加let _ = assignRoomsVC.view
。通过访问视图(assignRoomsVC.view
),您将强制加载视图并实例化其所有子视图。