以下の様にAppDelegate.swiftを編集して、初回起動時のVCを動的変更しようとしています。VCはMainpage.storyboardに2つあり、storyboardIDがnextとなっているものを状況に応じてinitialVCにしたいです。しかし以下の様にエラーが出てしまいます。。。AppDelegate.swiftでそれに関係のある処理を以下に示します。
swift
1@UIApplicationMain 2class AppDelegate: UIResponder, UIApplicationDelegate { //Thread 1: signal SIGABRT ⇦ここでエラー 3 4 var window: UIWindow? 5 6 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 7 8 9 if Preference.firstLaunchedAt != nil{ 10 //windowを生成 11 self.window = UIWindow(frame: UIScreen.main.bounds) 12 //Storyboardを指定 13 let storyboard = UIStoryboard(name: "Mainpage", bundle: nil) 14 //Viewcontrollerを指定 15 let initialViewController = storyboard.instantiateViewController(withIdentifier: "next") 16 self.window?.rootViewController = initialViewController 17 //表示 18 self.window?.makeKeyAndVisible() 19 }else{ 20 21 } 22 23 return true 24 }
Preference.firstLaunchedAtではUserDefaults.standardを使っています。ここにデータを保存されていればnextを起動すると言う様にしたいです。
因みにエラーが出てたときにコンソールに出ているのはlibc++abi.dylib: terminating with uncaught exception of type NSExceptionと言うメッセージです。
このアプリはまず起動するとToppage.storyboardに行き、そこからボタンを押すとMainpage.storyboardに飛ぶ様にしているのですが、このエラーはアプリ起動時のToppage.storyboardに行く前に出ます。どうすればこれを直せるでしょうか?
ーーーーーーーーーー追記ーーーーーーーーーーーーー
二回目以降だけにnextが起動される訳ではなく、Preference.firstLaunchedAtにデータが入っている場合はnextから起動したいです。Preference.firstLaunchedAtにはnilが入っている場会もあり、アプリが処理の途中で終了した場合などにPreference.firstLaunchedAtに値が入ったままの状態にしておきしっかり終わってから終了した場合はnilになっています。そしてエラーが出ているのはPreference.firstLaunchedAtがnilでは無い時です。なのでif Preference.firstLaunchedAt != nil以降の処理に問題があるんだと思います、、、
参考までにPreferenceのコードを以下に載せます。
swift
1struct Preference { 2 static let userDefault = UserDefaults.standard 3 4 struct Key { 5 static let FirstLaunchedAt = "first_launched_at" 6 } 7} 8 9extension Preference { 10 11 static var firstLaunchedAt: Date? { 12 get { 13 return userDefault.object(forKey: Key.FirstLaunchedAt) as? Date 14 } 15 set { 16 userDefault.set(newValue, forKey: Key.FirstLaunchedAt) 17 userDefault.synchronize() 18 } 19 } 20}
回答1件
あなたの回答
tips
プレビュー