2016-06-02 2 views
0

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

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    tableView.deselectRowAtIndexPath(indexPath, animated: true) 

     // Ensure controller knows which dataset to pull from, 
     // so detail view is correct 
     var friendChat: Friend! 

     friendChat = mappedFriends[indexPath.row] 

     // Now set the conditional cases: if a friend then chat, if user then friend request if not user then can invite them: 
     if(friendChat.statusSort == 2) { 

      var controller : IndividualChatController! 

      print(friendChat.name) 

      controller.friendChat? = friendChat 
      controller.senderId? = Global.sharedInstance.userID 
      controller.senderDisplayName? = Global.sharedInstance.userName 

      self.performSegueWithIdentifier("showIndividualChat",sender: controller) 

     } else 
      if (friendChat.statusSort == 1) { 

      print("Can invite to be friend") 

     } else if (friendChat.statusSort == 0) { 

      print("Invite to Feast") 

     } 

} 

Тем не менее, в процессе выполнения задания, из:

  controller.friendChat? = friendChat 
      controller.senderId? = FeastGlobal.sharedInstance.userID 
      controller.senderDisplayName? = FeastGlobal.sharedInstance.userName 

Ошибка: fatal error: unexpectedly found nil while unwrapping an Optional value появляется.

Зачем это происходит? Как это можно смягчить?

ответ

1

Вы объявляете, но не присвоение значения переменной controller здесь:

var controller : IndividualChatController! 

Вы делаете обещание, что это не ноль, установив тип к неявным развернутый необязательно с восклицательным знаком, т.е. IndividualChatController!

Однако это обещание не сохраняется, поскольку значение не присваивается ему, и это на самом деле ноль в то время этот код работает:

controller.friendChat? = friendChat 

Вот почему вы получаете фатальную ошибку.

Исправить было бы присвоение значения controller var при его объявлении. Например:

var controller:IndividualChatController = IndividualChatController() 
+0

Пожалуйста, смотрите вопрос: http://stackoverflow.com/questions/37581531/passing-data-with-performseguewithidentifier-nil, он точно отображает разрешение – Sauron

+0

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

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

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