【发布时间】:2022-01-14 13:33:19
【问题描述】:
我的应用程序生命周期函数 viewDidLoad 和 viewWillAppear 有问题。在我强行退出之前,我的应用程序几乎不会崩溃。我做了一些调试,问题似乎是,退出时,方法 viewDidLoad 和 viewWillAppear 在我强制退出应用程序后立即被调用。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("STARTSCREEN WILL APPEAR")
UserDefaults.standard.set(90, forKey: "user_profile_current_xp")
UserDefaults.standard.set(0, forKey: "user_profile_previous_level_xp")
UserDefaults.standard.set(0, forKey: "user_profile_next_level_xp")
UserDefaults.standard.set(0, forKey: "user_profile_player_level")
updateLevelLabel()
checkMenuItemLockStatus()
}
由于 EXC_BAD_ACCESS 异常,应用程序在 UserDefaults 行直接崩溃,这是有道理的,因为由于某种原因试图访问/设置值时,应用程序正在从内存中擦除。
我认为如果在强制退出应用程序时不会调用 viewDidLoad/Appear,则不会出现问题。这对我来说没有任何意义,我不记得以前在其他应用程序中遇到过类似的问题。我是否遗漏了什么,关闭应用程序时什么会触发这些方法?
提前谢谢你..
【问题讨论】:
-
您是说您的应用在您强制退出后下次启动时崩溃?如果您强制退出该应用程序,我预计会崩溃;您基本上是在发送 SIGKILL。您在哪里/如何看到崩溃?
-
“退出时”你不应该在 iOS 中这样做。
-
@ElTomato 你知道,人们会这样做——不管是否应该——所以你需要考虑一下。由于它是“滑动关闭”打开的应用程序的操作系统功能,因此 Apple 的意图非常好
-
@Paulw11 通常退出应用程序确实会终止 XCode 的信号,但不会在终止信号之前设置断点和错误的访问异常。崩溃仅出现在 XCode 中,执行停止并将特定行标记为红色