我在 Xcode 9(使用 SceneKit 技术的 macOS 游戏)中启动了新项目。我被故事情节包含NSWindowController与NSWindow和相关GameViewController用SCNView。项目运行良好(旋转飞机)。
现在在情节提要中,我将 Autosave 值设置为“MainWindow” NSWindow,运行项目,调整窗口大小,然后退出。我知道在退出窗口位置设置自动保存将使用 保存NSUserDefaults,所以我检查终端:
$ defaults read com.koati.Bloks ?
{
"NSWindow Frame MainWindow" = "415 228 450 322 0 0 1280 777 ";
}
Run Code Online (Sandbox Code Playgroud)
这是预期的行为。现在我再次运行项目,但我看到窗口位置没有恢复。如果在情节提要中删除GameViewController关系,则位置会被正确保存和恢复,所以我想这会GameViewController以某种方式影响窗口大小和位置。在带有 XIB 的旧 Xcode 中没有这样的问题。
编辑:经过一些测试后,我现在认为它与 SceneKit 完全无关,因为替换SCNView为NSViewinNSViewController会产生相同的结果。所以我认为问题是NSViewController通过 Storyboard 附加到NSWindow内容会影响窗口位置和大小。
也许有人知道如何解决这个问题?