我已经在我的AppKit(Cocoa)应用程序中实现了状态恢复.这很管用.

然而:如果用户通过双击应用程序保存的文档文件打开应用程序,那么我希望应用程序不恢复以前的窗口,而是only打开在Finder中打开的文档.

问题是,状态恢复似乎发生了before调用了打开文档文件的处理程序,所以即使我有办法 suppress 状态恢复,我也不知道在那个点上挂起的OpenURL调用.

我明白我可以核实emits 的论点,但这似乎是一种相当肮脏的方式.我认为我应该能够以某种方式从app对象中查询存储的文件路径/URL,但我什么也找不到.

或者我可以更改恢复文档与打开文档的顺序吗?到目前为止,我发现这两种情况都发生在[NSDocument restoreDocumentWindowWithIdentifier:state:completionHandler:]的内部,在completion函数的内部.我找不到一个可重写的函数,在那里我有更多的控制,虽然.

我通过覆盖NSDocument子类中的restoreStateWithCoder:encodeRestorableStateWithCoder:来实现状态恢复.

推荐答案

未记录(=不支持)功能:可以禁用通过打开文档启动应用程序时恢复所有文档.在applicationWillFinishLaunching个DO中

[NSUserDefaults.standardUserDefaults setBool:YES forKey:@"NSDiscardWindowsOnDocumentOpen"];

Swift相关问答推荐

在列表项内的NavigationLink中的按钮无法正常工作

UITableView未显示类数组数据

map 视图上的SwiftUI渐变折线

动画过程中的SwiftUI重绘视图

如何设置两个不同的视图模型以在我的SwiftUI应用程序中使用相同的数据源?

expose 不透明的底层类型

是否可以限制 ExpressibleByIntegerLiteral struct 的初始值?

Swift String.firstIndex(of: "\n") 返回 nil,即使字符串有 \n

为什么 String.contains 在我导入 Foundation 时表现不同?

如何避免从模块导入函数

`let case(value)` 和 `case(let value)` 之间的区别 (Swift)

如何在不阻塞 UI 更新的情况下使用 Swift Concurrency 在后台执行 CPU 密集型任务?

UnkeyedEncodingContainer 和 KeyedEncodingContainerProtocol 中的 superEncoder 是什么?

EXC_BREAKPOINT 崩溃的原因范围

如何在 iOS Swift 中进行多线程、并发或并行?

try 在解除分配时加载视图控制器的视图... UIAlertController

将活动指示器 colored颜色 更改为黑色

自定义 Google 登录按钮 - iOS

将 UIImage 剪成圆形

将 [String] 存储在 NSUserDefaults 中