2016-05-12 41 views
0

波纹管是我的代码。在按下其中一个按钮的同时,我不断获取解包无值的错误。为什么会发生?在尝试创建代理时获取nil

ContainerViewController:

protocol ButtonTitleSenderProtocol: class { 
      func leftButtonTitle(title:String) 
      func rightButtonTitle(title:String) 
    } 

    class ContainerViewController: UIViewController { [...] 
      weak var delegate: ButtonTitleSenderProtocol? 

      @IBAction func leftButtonPressed(sender: AnyObject) { 
       let myTitle = myLeftButtonOutlet.currentTitle! 
       delegate!.leftButtonTitle(myTitle) 
      } 

      @IBAction func rightButtonPressed(sender: AnyObject) { 
       let myTitle = myRightButtonOutlet.currentTitle! 
       delegate!.rightButtonTitle(myTitle) 
      } 
    } 

MyChatViewController:

class MyChatViewController: ChatViewController, ButtonTitleSenderProtocol{ 
    [...] 
      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
       let myVC = ContainerViewController() 
       myVC.delegate = self 
      } 

      func leftButtonTitle(title: String) { 
       addNewMessage(title) 
      } 

      func rightButtonTitle(title: String) { 
       addNewMessage(title) 
      } 
    } 
+0

因为你强迫解开! **不要做**。 “currentTitle”是“nil”或“委托”。调试您的代码以查看您必须有条件解包的位置。 – luk2302

+0

在'prepareForSegue(segue:sender:)'你创建一个全新的'ContainerViewController'对象,这是否正常?你不使用'segue.destinationViewController'? – Larme

+0

您不能使用默认初始化程序'()'创建任何'UIViewController'。您需要引用** real **对象,使用指定的初始化程序初始化,从segue或Interface Builder中的出口。 – vadian

回答

0

通过segue.destinationViewController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let myVC = segue.destinationViewController as! ContainerViewController 
    myVC.delegate = self 
} 
0

创建ContainerViewController's对象的对象试一试,在你的prepareForSegue有问题。你实际上是在创建一个新实例,并指定委托给该实例而不是一个这实际上是所谓

MyChatViewController的:

class MyChatViewController: ChatViewController, ButtonTitleSenderProtocol{ 
    [...] 
      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

       if let myVC = segue.destinationViewController as?ContainerViewController 
       { 

      myVC.delegate = self 


      } 



      } 

      func leftButtonTitle(title: String) { 
       addNewMessage(title) 
      } 

      func rightButtonTitle(title: String) { 
       addNewMessage(title) 
      } 
    } 
相关问题