SwiftUI:响应 macOS 上的应用程序终止
Posted
技术标签:
【中文标题】SwiftUI:响应 macOS 上的应用程序终止【英文标题】:SwiftUI: respond to app termination on macOS 【发布时间】: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:
的等价物?
【问题讨论】:
【参考方案1】:您可以通过适配器注入应用程序委托。使用如下示例:
#if os(macOS)
class AppDelegate: NSObject, NSApplicationDelegate
func applicationWillTerminate(_ aNotification: Notification)
// Insert code here to tear down your application
#endif
@main
struct MyApp: App
#if os(macOS)
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
#endif
// ... other code
【讨论】:
如何通过@ NSApplicationDelegateAdaptor
传递我的模型对象,以便我可以通过应用委托访问其属性?
一个问题 - 一个答案,这是不同的问题......你可以在***.com/a/63597866/12299030找到答案。以上是关于SwiftUI:响应 macOS 上的应用程序终止的主要内容,如果未能解决你的问题,请参考以下文章
macOS 上的 SwiftUI:如何为 onDelete 启用 UI(从列表中删除)
macOS 应用程序上的 12000 个条目的 FetchRequest 非常慢,但 iOS 应用程序却没有 - 尽管代码相同(macOS Big Sur / iOS 14 上的 SwiftUI)