NSWindowController 是否支持 encodeRestorableState()?

Is encodeRestorableState() supported in NSWindowController?

我这辈子都想不通。我想我已尽一切努力让 encodeRestorableState(with:) 方法在我的 NSWindowController 子类中被调用,但它就是没有。

在这上面花了几个小时后,我认为它实际上可能根本不受支持。那么this piece of documentation是什么意思呢?

请注意,它说 使用 方法而不是 overriding/implementing 方法。也许那是我弄错的地方。


更新

进一步挖掘,我发现我在 NSWindowController 子类中创建的 window 的 windowController 属性 设置为 nil。我想这就是 window 不告诉控制器对其状态进行编码的原因。我现在弄明白为什么是 nil.

尝试为您的 NSViewController/NSWindowController 子类调用 invalidateRestorableState()。稍后将调用 encodeRestorableState(with:)

终于想通了。基本上,这就是我在 AppDelegate:

中创建 window 控制器的方式
MainWindowController().showWindow(self)

我没有保留对 window 控制器实例的任何引用,并且由于 NSWindowwindowController 属性 是 weak,window 正在释放控制器。这就是导致许多问题的原因,包括这个问题中的那个。我也因此遇到了其他问题。