SwiftUI冷启动时UndoManager为nil,切换视图后才可用的问题求助
问题:SwiftUI冷启动时UndoManager为nil,切换视图后才可用
SwiftUI应用冷启动时,@Environment(\.undoManager) 处于nil状态,必须等用户切换视图后才会被赋值,此时撤销功能才能正常工作。例如需切换至"Focus"视图再返回后,撤销功能才可用。
相关代码
视图中的环境变量与任务代码
@Environment(\.managedObjectContext) private var viewContext @Environment(\.undoManager) private var undoManager
listOfCards.task{ viewContext.undoManager = undoManager // 冷启动时undoManager为nil }
App入口的持久化容器配置
mainView .environment(\.managedObjectContext, persistenceController.container.viewContext)
已尝试的无效方案
方案A:使用
.onChange监听undoManager变化
尝试在每个视图中添加以下代码检测赋值并关联到viewContext,但未触发:.onChange(of: undoManager) { _ in print(undoManager) viewContext.undoManager = undoManager }方案B:监听NSUndoManager通知
添加通知观察者,同样无效:private let undoObserver = NotificationCenter.default.publisher(for: .NSUndoManagerCheckpoint) .onReceive(undoObserver, perform: { _ in print(undoManager) viewContext.undoManager = undoManager })
目前仅切换至其他视图再返回后,UndoManager才能正常赋值。请问有何解决思路?是否遗漏了关键步骤?
内容的提问来源于stack exchange,提问作者MMV
相关产品推荐
相关产品推荐

