问题标签 [nswindowrestoration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
995 浏览

cocoa - 恢复 NSTableView 中的选择(NSWindowRestoration)

我正在一个非基于文档的 Cocoa 应用程序中进行窗口恢复。该应用程序具有类似 Mail.app 的界面。每个窗口代表一个帐户;该窗口中的边栏列出了该帐户中的对话,主区域列出了所选对话中的消息。

这些列表中的每一个都是基于视图的NSTableView. 会话列表绑定到一个绑定到窗口控制器属性NSArrayController的对象;消息列表绑定到第二个,第二个绑定到第一个的选择。contentSetaccountNSArrayControllercontentSetNSArrayController

我已经完成了我的窗口恢复工作,它重新打开了所有窗口并将它们与帐户对象重新关联,但我不知道如何恢复表视图的选择。这似乎不会自动发生——当窗口恢复时,选择了一个对象,但它不是之前选择的那个。这里发生了什么?保存和恢复选择的最简单方法是什么?

0 投票
3 回答
3093 浏览

objective-c - NSWindow 可恢复并不总是有效

我已经检查了我的 NSWindow 上的可恢复选项当我移动我的应用程序并更改其大小并关闭/重新打开我的应用程序时,它会将窗口大小和位置设置为最后的大小和位置

但这不会发生在我测试它的每台计算机上。它只发生在几台电脑上

他们没有关于简历的特殊设置。

有没有人有这方面的经验?

0 投票
2 回答
1801 浏览

objective-c - 如何在可可中保持应用程序状态

我需要在应用程序终止时存储应用程序的状态,以便当用户重新运行应用程序时,应用程序从上次关闭的状态运行。它是某种恢复应用程序,但是当应用程序意外关闭时会调用恢复方法。但是每次用户意外关闭时我都需要恢复应用程序手动关闭它。我只需要存储 App UI 而不是应用程序的数据。任何想法都会对我有所帮助。谢谢

0 投票
2 回答
3878 浏览

cocoa - 初始 NSWindow 大小占屏幕大小的百分比

我想将我的 NSWindow 大小设置为屏幕大小的函数。

Interface Builder 中有一个选项可以将其设置为点,但不是屏幕大小的函数。

如何以编程方式将其设置为默认值?

请注意,如果此类状态可用,我仍然希望 UI 保留从上一个会话中恢复其大小。

0 投票
1 回答
398 浏览

macos - How to programmatically terminate NSApp without encoding window state?

All OS X application that support NSWindowRestoration can be closed by selecting the menu entry "Quit and Close All Windows" (Option-Command Q). This disables the state restoration and the next time you open the app all windows will be in their default position.

The menu entry triggers the terminate: method on NSApplication. But so does the regular "Close App" menu as well (Command Q).

How can I do the "Quit and Close All Windows" programmatically? Do I really have to close all windows by myself and then call terminate:?

How does Apple magically decide what to do, when both actions are connected to the same terminate: method?

0 投票
0 回答
56 浏览

swift - 恢复嵌套的 NSDocuments

我正在为 MacOS 开发类似 Xcode 的 IDE。IDE 打开源文件(的实例TextDocument)并具有单独的项目文件(ProjectDocument包含项目设置的实例。两者都是NSDocument.

打开源文件时,WindowsController 和 contentViewController 仍然需要访问项目文件。

我最初解决这个问题的方法是var project: ProjectDocument?向 TextDocument 添加一个属性。这样每个源文件都有一个指向项目文档的指针。视图控制器的representedObject属性设置为文本文档。

这在创建、打开和保存文件时效果很好。

但是,重新打开应用程序后恢复窗口并非完美无缺。

TextDocument (设置为representedObject)得到正确恢复,但project属性没有。确实保存了一些东西,因为在方法中if coder.containsValue(forKey: "project")返回,但随后返回。好像编码与解码预期的格式不同。truerestoreState(with coder: NSCoder)self.project = coder.decodeObject(forKey: "project") as? ProjectDocumentnil

如果我更改 ProjectDocument 使其继承自NSObject而不是NSDocument,则项目确实会正确恢复。

所以问题似乎是编码NSDocument实例。

我也尝试将项目文件存储为视图控制器的单独属性,但这有同样的问题。不知何故,NSDocuments 似乎不喜欢被编码。

我希望恢复的project财产。TextDocument它不是

0 投票
1 回答
110 浏览

swift - NSDocument 选项卡窗口恢复

这个问题处理基于文档的应用程序中的选项卡窗口恢复。

在允许用户创建和转换选项卡窗口的基于文档的 OSX 应用程序中,我需要保留和恢复每个窗口的“选项卡”状态。

目前,我的文档控制器恢复其文档窗口,但不恢复选项卡部署;我找回了单个窗口;我可以将所有内容合并为一个,但这太强硬了,因为他们以前的分组丢失了。

我的应用程序文档类的 -makeWindowControllers()函数是我影响新控制器的地方,它们是否应该级联,我认为这是错误的,在恢复期间:

所以在它完成启动之前它是错误的。

最后,我的窗口类的功能方法:

在更改选项卡状态时,窗口还原状态无效。但是我不确定NSWindowRestoration协议的实现,当涉及文档控制器时,谁或什么需要实现协议。

我认为这是最后一个函数从未被调用的原因。我得到有关编码的调试输出,但在下一次应用程序执行期间,该restoreStore(coder:)函数从未被调用。

所以我想谁在这样的环境中实现这个窗口恢复协议是我的问题,或者是一个很好的例子。