appDelegateからHomeViewControllerのメソッドhello()
を呼び出そうとしたところ
こちらのエラーが表示されアプリが落ちてしまいます。
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
どこが問題なのでしょうか?
AppDelegate
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? var homeViewController: HomeViewController! func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.homeViewController.hello()//ここでエラー表示される落ちる return true } }
HomeViewController
import UIKit class HomeViewController: UIViewController { let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate override func viewDidLoad() { super.viewDidLoad() appDelegate.homeViewController = self print("home") } func hello() { print("hello") } }
そうなるのが正しい動きだと思います。
なにか参考にされているページはありますか?
homeViewController に値が入ってません。
AppDelegate をわざわざ UIApplication から取得しなくても self でいいし。
あと、Xcode 11 をお使いなら SceneDelegate に書くべきかと。
参考ページを追記致しました。
今回、SceneDelegateでの実装は見送る形でmainStroryboardでの実装にしたいと考えております。
homeViewControllerに値が入っていないとは、具体的にどこを修正するべきなのか
ご教示頂けますでしょうか?
application(_:didFinishLaunchingWithOptions:)に、HomeViewController().hello() で "hello" と出力されるだろうけど、やりたいこととは違うんでしょ?
質問文に書いてある場所での、appDelegate.homeViewController.hello()はライフサイクル的に無理なんでは?
現状ではRunしたときにデバッグエリアに"hello"と出力される前に該当箇所で落ちています。
appDelegateから、他のviewcontrollerに記述しているメソッドを利用するのは無理なのでしょうか?
意味ない回答だけど一応かいときますね。