gpt4 book ai didi

objective-c - 为什么 AppKit 在正常的应用程序终止时会破坏我的 "Saved Application State"文件夹?

转载 作者:太空狗 更新时间:2023-10-30 03:30:27 24 4
gpt4 key购买 nike

设置:

  • OS X 10.9.0 (13A603)
  • Xcode 版本 5.0.2 (5A3005)
  • 普通的基于 Cocoa 文档的应用程序

我开发了一个典型的 Cocoa 基于文档的 OS X 应用程序

我的意图是支持 Apple 的 User Interface Preservation从应用程序的先前运行中恢复打开的文档/Windows 的功能。

This is supported by default in Document-based apps .

不会覆盖任何相关方法,例如:

-[NSWindow isRestorable]

-[NSResponder encodeRestorableStateWithCoder:]
-[NSResponder decodeRestorableStateWithCoder:]

-[NSApplication restoreWindowWithIdentifier:state:completionHandler:]
-[NSDocumentController restoreWindowWithIdentifier:state:completionHandler:]

(注意:默认情况下,我的文档窗口中的-[NSWindow isRestorable] 已经返回YES。大概这是基于文档的应用程序的一个功能)

我不认为我在我的应用程序中做了任何与 UI 保留相关的异常事情。

问题:

我的应用程序中的 UI 保留不起作用。但它以一种非常奇怪的方式失败了。当我运行我的应用程序(通过在 Xcode 中构建和运行它或通过独立运行分发构建)时,正常的 Saved Application State 文件夹是正确创建并填充了正确的应用程序状态信息。

Correct Saved Application State Folder Contents

如果我强制退出我的应用程序(通过突然停止正在运行的 Xcode 构建或通过 Dock Force Quit 菜单项),然后重新启动我的应用程序,UI Preservation功能完美。该应用会找到存储在 Saved Application State 文件夹中的信息,并正确地恢复上次运行时打开的 Documents/Windows。

但是,每当我正常退出我的应用程序时,整个 Saved Application State 文件夹都会被删除(我可以在 Finder 中看到这种情况)。因此,下次我启动我的应用程序时,没有要恢复的存储状态,恢复失败。

我追踪到此文件夹删除发生在调用 -[NSApplication terminate:] 之后的某个时间。

所以我在 unlink() 上放置了一个符号断点,果然,AppKit 中的一些代码一个接一个地故意删除了 Saved Application State 文件夹和它的所有内容。

enter image description here

请注意 NSApplicationMain 主线程上名为 NSPersistentUI I/O 的队列对 unlink() 的调用。 (这显然不是来 self 的代码)

为什么 AppKit 在应用程序正常终止时会破坏我的 Saved Application State 文件夹?

这正常吗?

我怎样才能阻止它?

最佳答案

我们覆盖了@indragie 为我们的沙盒应用提到的复选框,因为对于新帐户,该框未被选中,因此关键状态恢复功能丢失。

代码就像将它添加到您的 main() 例程中一样简单:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSQuitAlwaysKeepsWindows"]; // override stupid global preference, so our state restore works properly

关于objective-c - 为什么 AppKit 在正常的应用程序终止时会破坏我的 "Saved Application State"文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com