Tod*_*orf 8 macos xcode cocoa objective-c appkit
设置:
我开发了一个典型的基于 Cocoa Document的OS X应用程序.
我的目的是支持Apple的用户界面保留功能,以便从以前的应用程序运行中恢复打开的Documents/Windows.
我没有压倒任何相关的方法,例如:
-[NSWindow isRestorable]
-[NSResponder encodeRestorableStateWithCoder:]
-[NSResponder decodeRestorableStateWithCoder:]
-[NSApplication restoreWindowWithIdentifier:state:completionHandler:]
-[NSDocumentController restoreWindowWithIdentifier:state:completionHandler:]
Run Code Online (Sandbox Code Playgroud)
(注意:-[NSWindow isRestorable]在我的文档窗口中YES,默认情况下已经返回.大概这是基于文档的应用程序的一项功能)
在我的与UI Preservation相关的应用程序中,我认为我没有做任何与众不同的事情.
问题:
我的应用程序中的UI保留无效.但它以一种非常奇怪的方式失败了.当我运行我的应用程序时(通过在Xcode中构建和运行它或通过独立运行分发版本),Saved Application State正确创建普通文件夹并使用正确的应用程序状态信息填充.

如果我强制退出我的应用程序(通过突然停止正在运行的Xcode构建或通过Dock Force Quit菜单项),然后重新启动我的应用程序,UI保留功能完美地工作.该应用程序查找存储在Saved Application State文件夹中的信息,并从之前的运行中正确恢复打开的Documents/Windows.
但是,每当我正常退出我的应用程序时,整个Saved Application State文件夹都会被删除(我可以在Finder中看到这种情况).因此,下次启动应用程序时,没有要恢复的存储状态,并且恢复失败.
我跟踪了这个文件夹删除,直到-[NSApplication terminate:]调用后的某个时间发生.
所以我放了一个符号断点unlink(),当然,AppKit中的一些代码是故意删除Saved Application State文件夹及其所有内容.

请注意unlink()来自NSPersistentUI I/O主线程上调用的队列的调用NSApplicationMain.(这显然不是来自我的代码)
为什么AppKit会Saved Application State在正常的应用终止时销毁我的文件夹?
这是正常的吗?
我怎么能阻止这个?
Wil*_*ley 14
我们覆盖了沙盒应用程序的@indragie提及复选框,因为对于新帐户,该框未被选中,因此关键状态恢复功能将丢失.
代码就像将其添加到main()例程一样简单:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"NSQuitAlwaysKeepsWindows"]; // override stupid global preference, so our state restore works properly
Run Code Online (Sandbox Code Playgroud)
ind*_*gie 10
确保在"系统偏好设置">"常规"中取消选中此框:

选中此框时,它会禁用状态恢复系统范围并导致您描述的行为.
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |