質問: Swiftの各タブ内にWKWebViewを生成するWebViewアプリを開発しています。 UINavigationControllerとUITabBarControllerを併用していて、上部に共通のヘッダーがあります。 各タブにはそれぞれWKWebViewでWebページを設置していて、Webページ内で違うページに遷移すると上部のヘッダーに戻るボタンを追加します。(アクティブタブが変わればそのWebViewに戻るボタンが必要かどうか判断しています) Tab毎のViewController内でWebViewが戻るメソッドを用意しています。 ``` class Tab1ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate { var webView: WKWebView! .... public func webViewGoBack() { webView.goBack() } } ``` UITabBarControllerのクラス内で戻るボタンが押された時のActionを設定しています。 ``` class TabsViewController: UITabBarController { @IBAction func webViewGoBackBtn(_ sender: UIBarButtonItem) { Tab1ViewController().webViewGoBack() } .... ``` アプリはビルドできるのですが、実際にヘッダーのボタンを押してwebViewGoBackを実行するとXcodeで以下のエラーが表示されてアプリがクラッシュします。 ``` Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value ``` Tab1ViewController内でwebViewGoBack()を実行した時は正常に動きました。 修正方法または解決方法を教えて頂けると助かります。
回答: ソース全体が質問に書かれていないので、確実なことは言えませんが、提示されたソースの`@IBAction`部で ``` Tab1ViewController().webViewGoBack() ``` としておられますが、これでは、Tab1ViewControllerを新規に作成し、それに`webViewGoBack`というメソッドを発行していますね。 これでは、作られたての`Tab1ViewController`のインスタンス内の操作すべき`WKWebView`にはまだなにも入っていない(=`nil`)ので、`public func webViewGoBack()`内部の ``` webView.goBack() ``` の`webView`は、まだ`nil`のため出るエラーと思われます。 対応としては、`TabsViewController`の初期化でメンバー変数に`Tab1ViewController`のインスタンスを保存しておき、(当然その中の`webView`も値がちゃんと入る様にし、そのメンバーに対して`webViewGoBack()`メソッドを実行することだと思います。 なので、`Tab1ViewController`の内容は、必要な部分だけ記述しますが ``` class TabsViewController: UITabBarController { let tab1: Tab1ViewController = Tab1ViewController() override func viewDidLoad() { // tab1の設定が必要であればここで行う } @IBAction func webViewGoBackBtn(_ sender: UIBarButtonItem) { tab1.webViewGoBack() } } ``` と、なるべきだと思います。