2016-03-26 3 views
-1

Я пытаюсь передать данные Realm из пользовательских ячейки в деталях 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 

EDIT

забыл поставить имя класса в раскадровку из tableViewController. Это

+0

Название действительно вводит в заблуждение. Название приводит меня к мысли, что вы столкнулись с каким-то интересным сценарием в Свифте. Тело вопроса указывает на другое (поскольку фактическое сообщение об ошибке даже не удалено близко к тому, что вы указали в заголовке). – nhgrif

+0

Я столкнулся с аналогичной проблемой, и поскольку я новичок в Xcode, я не понимаю вашего заявления «Забыл поставить имя класса в раскадровку TableViewController». Можете ли вы показать код, пожалуйста? – Zvi

+0

Забудьте об этом. Я понял. – Zvi

ответ

1

кажется, что ваш destinationViewController не того типа, который вы ожидаете. Вам нужно будет проверить segue, чтобы убедиться, что он указывает на правильный контроллер. Если это так, вам нужно пересмотреть иерархию классов контроллера.

Есть TaskListTableViewController и TaskViewTableViewController часть той же иерархии классов? По Swift docs on typecasting вы можете только снижать с TaskListTableViewController до TaskViewTableViewController, если ваш вид списка является подклассом вашего вида Task. Недостаточно того, что оба являются просто подклассами UITableViewController.

Другими словами, если ваша иерархия классов выглядит так, вы не быть в состоянии обратное приведение в представлении списка к представлению задач:

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

Но если ваша иерархия выглядит так, вам будет в состоянии от одного обратного приведения к другим:

UITableViewController -> TaskListTableViewController -> TaskViewTableViewController 

Что касается вашей второй попытки при литье в UINavigationController, навигационный контроллер вообще не связан с UITableViewController, поэтому он не может быть отнесен к этому классу тоже.

Вы можете проверить иерархию наследования для UINavigationController и UITableViewController. Нужно быть подклассом другого для любого типа кастингов для работы. Вы увидите, что это не так.

+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

Смежные вопросы