无法将'TableViewController'类型的值转换为'TableViewController'

时间:2016-03-26 18:26:32

标签: ios swift segue

我正在尝试将Realm数据从Custom cell传递给Detail TableView Controller

ReactDOM.render(
    <Form>
        <InputEmail/>
    </Form>,
    document.getElementById('app')
);

我收到错误

  

无法转换'Taskio.TaskListTableViewController'类型的值   (0x10001f028)到'Taskio.TaskViewTableViewController'(0x10001f280)。

也尝试了

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

以及

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

修改

忘记将类名放入tableViewController的storyboard中。这是工作

3 个答案:

答案 0 :(得分:2)

对我来说问题是我忘记将课程名称放在故事板中

enter image description here

答案 1 :(得分:1)

您的destinationViewController似乎与您期望的类型不同。您需要检查segue以确保它指向正确的控制器。如果是,您需要重新访问控制器类层次结构。

TaskListTableViewControllerTaskViewTableViewController是否属于同一个类层次结构?根据{{​​3}},如果您的列表视图是任务视图的子类,则只能从TaskListTableViewController转发到TaskViewTableViewController。两者都只是UITableViewController的子类是不够的。

换句话说,如果您的类层次结构如下所示,您将能够从列表视图向下转换为任务视图:

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

但是如果你的层次结构看起来像这样,你就可以从一个层层叠加到另一层:

UITableViewController -> TaskListTableViewController -> TaskViewTableViewController

关于您第二次尝试转换为UINavigationController,导航控制器根本与UITableViewController无关,因此也无法将类型转换为该类。

您可以查看Swift docs on typecastingUINavigationController的继承层次结构。一个人需要成为另一个的子类才能使任何类型的转换工作。你会发现事实并非如此。

答案 2 :(得分:-2)

如果我从错误消息中理解,您正在尝试将TaskListTableViewController强制转换为TaskViewTableViewController。

目标是一个TaskListTableViewController,所以你必须像对待它一样。

let nextViewController = segue.destinationViewController as!  TaskListTableViewController