AppDelegate関数の前または後に初期ビューコントローラのプロパティが設定されますかdidFinishLaunchingWithOptionsが呼び出されますか?プロパティがユーザーにリンクされているためにアプリケーションがクラッシュする
ここにAppDelegateのコードがあります。私のアプリが最初に起動したときに、 "CurrentDateBool"のユーザーデフォルトが設定されていない場合、trueに設定されます。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if UserDefaults.standard.value(forKey: "currentDateBool") == nil {
UserDefaults.standard.setValue(true, forKey: "currentDateBool")
}
return true
}
ここに私の最初のView Controllerがあります。これは、nilであるため、currentDateBoolプロパティでアプリケーションをクラッシュさせます。ただし、AppDelegateでtrueに設定されているので、この値はゼロであってはなりません。私は、AppDelegateが最初のビューコントローラの前に設定されると考えました。誰かがプロパティが設定される順序を明確にしてもらえますか?
class TimestampTableViewController: UITableViewController {
var currentDateBool = UserDefaults.standard.value(forKey: "currentDateBool") as! Bool
override func viewDidLoad() {
super.viewDidLoad()
}
...
}
currentDateBoolプロパティをviewDidLoadのユーザーデフォルトに設定すると、動作するようになります。
class TimestampTableViewController: UITableViewController {
var currentDateBool = true
override func viewDidLoad() {
super.viewDidLoad()
currentDateBool = UserDefaults.standard.value(forKey: "currentDateBool") as! Bool
}
...
}
"currentDateBoolプロパティをviewDidLoadのユーザーの既定値に設定すると、動作させることができます。"そう! – matt
@mattしました!ハハ。私は、なぜ私がしないときにそれがクラッシュしているのか理解しようとしています。私はプロパティが設定される前にAppDelegateが呼び出されると思ったので、クラッシュする理由を理解できません。 – chickenparm
TimestampTableViewControllerはルートビューコントローラですか?メインのストーリーボードを使用していますか? – matt