2016-03-26 55 views
-1

我試圖從自定義單元格傳遞域數據詳細的TableView控制器無法投類型的值「TableViewController」到「TableViewController」

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "viewTask" { 
     let nextViewController = segue.destinationViewController as! TaskViewTableViewController 
     let indexPath : NSIndexPath = self.tableView?.indexPathForSelectedRow as NSIndexPath! 
     let task = tasks![indexPath.row] 
     nextViewController.name = task.name 
     nextViewController.notes = task.notes 
     nextViewController.date = task.date 
     nextViewController.timeLength = task.timeLength 
    } 
} 

我收到提示

莫非不會將'Taskio.TaskListTableViewController' (0x10001f028)類型的值轉換爲'Taskio.TaskViewTableViewController'(0x10001f280)。

也試過

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "viewTask" { 
      let nav = segue.destinationViewController as! UINavigationController 
      let nextViewController = segue.destinationViewController as! TaskViewTableViewController 
      let indexPath : NSIndexPath = self.tableView?.indexPathForSelectedRow as NSIndexPath! 
      let task = tasks![indexPath.row] 
      nextViewController.name = task.name 
      nextViewController.notes = task.notes 
      nextViewController.date = task.date 
      nextViewController.timeLength = task.timeLength 
     } 
    } 

let nextViewController : TaskViewTableViewController = segue.destinationViewController as! TaskViewTableViewController 

編輯

忘了把類名到tableViewController故事板。這是工作

+0

標題實在是誤導性的。標題讓我相信你在Swift中遇到過一些有趣的場景。問題主體表示否則(因爲實際的錯誤信息甚至不是很接近你放在標題中的東西)。 – nhgrif

+0

我面臨類似的問題,由於我是Xcode的新手,我不明白你的陳述「忘了將類名放入TableViewController的故事板」。你可以顯示代碼嗎? – Zvi

+0

忘記它。我想到了。 – Zvi

回答

1

看來你的destinationViewController不是你所期望的類型。您需要檢查賽格,確保它指向正確的控制器。如果是,您需要重新訪問控制器類層次結構。

TaskListTableViewControllerTaskViewTableViewController是同一類層次結構的一部分嗎?根據Swift docs on typecasting,如果List視圖是Task視圖的子類,則只能從TaskListTableViewController降至TaskViewTableViewController。僅僅是UITableViewController的子類是不夠的。

換句話說,如果你的類層次結構是這樣的,你會能夠從列表視圖任務視圖垂頭喪氣:

     ----> TaskListTableViewController 
        /
UITableViewController 
        \ 
         ----> TaskViewTableViewController 

但如果您的層次結構是這樣的,你將能夠從一個向下轉型到其他:

UITableViewController -> TaskListTableViewController -> TaskViewTableViewController 

在鑄造關於你的第二次嘗試0,導航控制器根本與UITableViewController無關,因此無法將該類型轉換爲該類別。

您可以查看UINavigationControllerUITableViewController的繼承層次結構。一個需要成爲另一個的子類,以便任何類型的投射工作。你會發現情況並非如此。

+0

我的層次結構看起來像你的第二個 – patrikbelis

-2

如果我從錯誤消息瞭解,您正試圖將TaskListTableViewController強制轉換爲TaskViewTableViewController。

目的地是一個TaskListTableViewController,所以你必須像一個對待它。

let nextViewController = segue.destinationViewController as! TaskListTableViewController 
+0

1.我試過了,如果你能閱讀我的整篇文章。和2.試圖將TaskListTableViewController強制轉換爲TaskViewTableViewController而不是反轉,因此目標是TaskViewTableViewController – patrikbelis

+0

就是這樣。你的目的地不是TaskViewTableViewController。 – ryantxr

+0

反對嗎?真? – ryantxr

0

對我來說,問題是我忘了把類的名字在故事板

enter image description here