2017-03-26 49 views
0

我試圖從表視圖單元格中執行一個segue,其中一個值「樓層號」指向另一個vc,該值將用於分配房間的數量每層。我在整個函數中都有斷點來驗證傳遞的值是否爲零。關鍵是它不是零,它具有「樓層號」的值。當我嘗試將該值分配給下一個VC中的變量時,我得到解包任選發現零錯誤。有人能幫我解決這個問題,因爲我沒有看到這是從哪裏來的,調試器顯示我在我想要傳遞的變量內有一個值。代碼如下。謝謝:準備爲segue導致「發現零,同時展開可選值」

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 
      } 
     } 
    } 
} 

}

回答

1

在爲賽格瑞方法準備,認爲還沒有裝載,因而你的故事板沒有設立任何的觀點。

看起來像floorNumberTxt可能是一個文本字段或標籤。您正在嘗試分配此視圖的屬性,但該視圖尚不存在。因此,「在解包可選值時發現零」錯誤信息

嘗試在分配視圖控制器的視圖屬性之前添加let _ = assignRoomsVC.view通過訪問視圖(assignRoomsVC.view),您將強制視圖加載並實例化其所有subviews。

+0

好的,謝謝。請問我該如何解決這個問題? –

+0

謝謝。好極了,有效。 –

+0

不客氣。不要忘記標記答案爲可接受的 –

相關問題