【发布时间】:2020-11-21 06:20:50
【问题描述】:
我正在使用 SwiftUI 2.0 创建一个跨平台应用程序。应用程序的生命周期由 SwiftUI 管理,因此没有应用程序或场景委托。如果可能的话,我想保持这种状态。为了在应用退出或进入后台时保留数据,我正在关注scenePhase的变化。
@main
struct MyApp: App {
@Environment(\.scenePhase) var scenePhase
@StateObject var dataModel = DataModel()
var body: some Scene {
WindowGroup {
ContentView()
.onChange(of: scenePhase) { newScenePhase in
switch newScenePhase {
case .background, .inactive:
dataModel.save()
default: break
}
}
}
}
但是,这种方法有一个固有的缺陷:在 macOS 上,当应用程序终止时,scenePhase 没有变化,因此数据不会持久化。是否有单独的机制来检测应用程序终止? SwiftUI 是否有 applicationWillTerminate: 的等价物?
【问题讨论】: