2016-10-07 3 views
2
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toChat2" { 

     guard let navController = segue.destinationViewController as? UINavigationController, 
     let chatController = navController.viewControllers.first as? ChatViewController else { return } 

     let indexPaths = self.tableView!.indexPathsForSelectedRows! //crashes on this line 
     let indexPath = indexPaths[0] as NSIndexPath 

     chatController.senderId = FIRAuth.auth()?.currentUser?.uid 
     chatController.senderDisplayName = FIRAuth.auth()?.currentUser?.displayName ?? "" 
     chatController.friendId = messagesArray[indexPath.row].userId 
     chatController.userName = messagesArray[indexPath.row].name 
    } 

В чем проблема? Я пробовал по-другому. Я объявляю две переменные и пытались действовать здесь:быстро, как исправить готовность к segue для просмотра стола

var userId:String! 
var userName:String!  

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 

    userId = messagesArray[indexPath.row].userId 
    userName = messagesArray[indexPath.row].name 
    self.performSegueWithIdentifier("toChat2", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toChat2" { 

     guard let navController = segue.destinationViewController as? UINavigationController, 
     let chatController = navController.viewControllers.first as? ChatViewController else { return } 

     chatController.senderId = FIRAuth.auth()?.currentUser?.uid 
     chatController.senderDisplayName = FIRAuth.auth()?.currentUser?.displayName ?? "" 
     chatController.friendId = userId 
     chatController.userName = userName 
    } 
} 

Но таким образом он работает, но не правильно, после нажатия одного из элементов в виде таблицы, не отвечая, и только второй щелкните по нему движется, но с данными из первый клик! :) как это исправить?

ответ

1

Я сделал это раньше! Вы используете строку DESELECT вместо строки SELECT.

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

+0

мой ошибка. извините –

+0

Нет проблем. Это привело меня в замешательство в прошлом - я думаю, что все сделали это хотя бы один раз. – creeperspeak

+0

Это правда xD ... –

0

Это потому, что вы используете didDeselectRow вместо didSelectRow во втором примере :). Поэтому измените tableView (didDeselectRow) на tableView (didSelectRow), и проблема с отправкой неправильных данных должна быть решена.

Надеюсь, это поможет вам.