ベローが私のコードです。私はこれらのボタンの1つを押している間は、常に値をアンラップしないというエラーが発生しています。それはなぜ起こるのですか?デリゲートの作成中に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)
}
}
! **それをしないでください**。 'currentTitle'は' nil'か 'delegate'です。コードをデバッグして、条件付きで展開する必要がある場所を確認します。 – luk2302
'prepareForSegue(segue:sender:)'では、新しい 'ContainerViewController'オブジェクトを作成していますが、それは普通でしょうか?あなたは 'segue.destinationViewController'を使用しませんか? – Larme
デフォルトの初期化子 '()'で 'UIViewController'を作成することはできません。指定されたイニシャライザで初期化された** real **オブジェクトへの参照がSegueから、またはInterface Builderでコンセントで参照される必要があります。 – vadian