2016-02-04 6 views
0

В текущем проекте, над которым я работаю, мне нужно передать переменные из вида в режим просмотра. Я успешно передал переменную из tableviewcontroller в UIviewcontroller, как это.Перенос переменной с TableViewController на TableViewController

if segue.identifier == "Done" { 
      let nav = segue.destinationViewController as! UINavigationController 
      let transfer = nav.topViewController as! quizViewController 
      transfer.questionArrays = questions2 
     } 

Но когда я попытался передать переменную из tableviewcontroller к контроллеру Tableview, как это,

if segue.identifier == "answerSegue" { 
      let nav = segue.destinationViewController as! UINavigationController 
      let transfer = nav.topViewController as! answersTableViewController 
      transfer.index = rowIndex 
     } 

Я получаю сообщение об ошибке говорящее

«Не удалось бросить значение типа list2. answerTableViewController "

Итак, вопрос в том, как передать переменную из UITableViewController в UITableViewController?

Вот моя доска для разговора. Storyboard

+0

Можете ли вы попытаться четко рассказать нам о своей иерархии взглядов? – Eendje

+0

вы уверены, что контроллер назначения «answerSegue» является контроллером навигации (чей корневой контроллер «отвечаетTableViewController»? – ishaq

+0

Глядя на ваш скриншот, второй 'UINavigationController' не нужен. Если у вас нет причин для используйте дополнительный контроллер навигации. Я предлагаю вам удалить его и использовать одно из приведенных ниже решений. – Eendje

ответ

1

Во-первых, вы приводите:

let transfer = nav.topViewController as! quizViewController 

Тогда вы разыгрываете:

let transfer = nav.topViewController as! answersTableViewController 

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

Как правило, вы не получаете доступ к целевому контроллеру через UINavigationController. Вы просто делаете что-то вроде:

let destinationController = segue.destinationViewController as! YourDestinationControllerClass 
destinationController.variable = value 

Не нужно вообще включать UINavigationController.

Возможно, это сработает в вашем случае? :

if segue.identifier == "answerSegue" { 
    let transfer = segue.destinationViewController as! answersTableViewController 
    transfer.index = rowIndex } 
0

Это потому, что в раскадровке второго UITableViewController не имеет свой собственный UINavigationController. Попробуйте это вместо:

if segue.identifier == "answerSegue" { 
    let transfer = segue.destinationViewController as! answersTableViewController 
    transfer.index = rowIndex 
} 
Смежные вопросы