2016-05-12 6 views
0

Nach unten ist mein Code. Ich bekomme ständig Fehler beim Auspacken von NULL-Werten, während ich einen dieser Knöpfe drücke. Warum passiert es?Wenn Sie versuchen, einen Delegierten zu erstellen, wird keine Eingabe gemacht.

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

Weil Sie zwingen auspacken! ** Tu es nicht **. Entweder ist der 'currentTitle'' nil' oder der 'delegate' ist. Debuggen Sie Ihren Code, um zu sehen, wo Sie bedingt auspacken müssen. – luk2302

+0

In 'prepareForSegue (shangue: sender:)' ist das ein ganz neues 'ContainerViewController' Objekt, ist das normal? Sie verwenden nicht 'segue.destinationViewController'? – Larme

+0

Sie können keinen 'UIViewController' mit dem Standardinitialisierer'() 'erstellen. Sie benötigen den Verweis auf das Objekt ** real **, das mit dem angegebenen Initialisierer initialisiert wurde, aus dem Segment oder mit einem Ausgang in Interface Builder. – vadian

Antwort

0

Objekt von ContainerViewController's Objekt erstellen über segue.destinationViewController

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

Das Versuchen, Es gibt ein Problem in Ihrem prepareForSegue. Sie erstellen tatsächlich eine neue Instanz und Zuweisen von Delegierten zu dieser Instanz statt, dass man die eigentlich

MyChatViewController genannt wird:

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) 
      } 
    }