2015-05-01 3 views
0

У меня есть школьный проект, чтобы сделать быстрое приложение. Я очень новичок в быстроте и попытке передать данные через segue из табличного представления в другое представление. Проект файла Download Here.Swift Segue не работает

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "PopularDetails" { 
      let detailsViewController = segue.destinationViewController as DetailsViewController 
      let selectedIndexPath = popularTableView.indexPathForSelectedRow() 
      detailsViewController.shots = shots[selectedIndexPath.row] 
     } 
    } 


} 
+1

Каков ваш вопрос? Какая у вас проблема? – rmaddy

+0

извините забыл опубликовать это. im получает 'NSIndexPath?' не имеет члена с именем «строка». –

+0

Ваш код компилируется и запускается здесь – gutenmorgenuhu

ответ

0

.indexPathForSelectedRow() возвращает необязательный. Вам необходимо развернуть его, прежде чем вы сможете получить доступ к его свойствам. Попробуйте:

let selectedIndexPath = popularTableView.indexPathForSelectedRow() 
detailsViewController.shots = shots[selectedIndexPath!.row] 

(см exclamationmark)

+0

Спасибо за ответ gutenmorgenuhu. Im теперь получает «фатальную ошибку: неожиданно нашел нуль при развертывании необязательного значения». Я предполагаю, что мои данные не отформатированы правильно? –

+0

Проблема заключается в том, что вы хотите запустить сеанс, когда «Просмотреть больше» используется. Но это НЕ выбирает строку, а .indexPathForSelectedRow() - нуль. Когда вы выбираете строку, и после этого вы нажимаете «Просмотреть больше». Все отлично. Вы можете избавиться от просмотра больше, и стрелять из сеге при выборе строки. Вы можете выполнить это в раскадровке, ctrl-перетаскивая новый сегмент от PopularCell до элемента ViewController Details. С этого момента segue правильно выполняет выбор строки (а не «Показать больше») – gutenmorgenuhu

0

Хотя @gutenmorgenuhu является правильным, это, вероятно, лучше, практика использования:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "PopularDetails" { 
     if let detailsViewController = segue.destinationViewController as? DetailsViewController { 
      if let selectedIndexPath = popularTableView.indexPathForSelectedRow() { 
       detailsViewController.shots = shots[selectedIndexPath.row] 
      } 
     } 
    } 
} 
Смежные вопросы