現在、delegateを使ってある画面からボタンを押すと別のstory boardへ遷移するという実装をしたいと考えています。
しかし、Unexpectedly found nil while implicitly unwrapping an Optional valueというエラーが発生し、なかなか解決せず四苦八苦しています。
具体的には、テーブルビューのセルでボタンを配置したビューがあり、そのボタンをタップして画面遷移をしたいと考えています。
ビューで画面遷移のメソッドを定義し、カスタムセルでデリゲートを使ってボタンタップ時にそのメソッドを呼び出し、実装をしようとしています。
viewController
1 2//テーブルビューなどは省略// 3 4 5//画面遷移メソッドを定義 6extension TableViewController: CustomCellDelegate { 7 func buttonDidTap() { 8 let vc = UIStoryboard(name: "OtherViewController", bundle: nil).instantiateInitialViewController()! 9 navigationController?.pushViewController(vc, animated: true) 10 } 11}
customCell
1 2import UIKit 3 4// プロトコルの宣言 5protocol CustomCellDelegate: class { 6 func buttonDidTap() 7} 8 9class CustomCell: UITableViewCell { 10 // 表示させる文字列用label 11 @IBOutlet private weak var product: UILabel! 12 13 var indexPath:IndexPath! 14 15 // delegateの宣言 16 weak var delegate: CustomCellDelegate! 17 18 override func awakeFromNib() { 19 super.awakeFromNib() 20 } 21 22 // labelに文字を設定 23 func setCell(with viewModel: [CellDataModel]?) { 24 if let title = viewModel?[indexPath.row].title { 25 self.product.text = title 26 } 27 } 28 29 //Unexpectedly found nil while implicitly unwrapping an Optional valueエラー発生 30 @IBAction func ButtonAction(_ sender: Any) { 31 delegate.buttonDidTap() 32 } 33}
上記の部分でエラーが発生するのですが、nilではないはずなのにこのエラーが出てしまいます…
以下の内容を試みましたが、解決しておりません
- StoryboardでRecieved Actionsが紐づいていることは確認済み(消し忘れなどでエラーが発生しているOutletなどもなし)
delegate.productButtonDidTap()
の部分を、delegate?.productButtonDidTap()
に変更したところ、エラーは発生しないが何も起こらなかった(xcodeのコンソールにも何も動きがない)weak var delegate: CustomCellDelegate!
を、weak var delegate: CustomCellDelegate?
にしても同じく何も起こらず。- 遷移先のStoryboard IDをつけていないからかと思ったが、つけてもエラーが発生した。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。