2017-11-07 8 views
1

Xcode 9で新しいプロジェクトを開始しました(SceneKitテクノロジーを搭載したmacOSゲーム)。 NSWindowControllerを含むストーリーボードにNSWindowGameViewControllerSCNViewと関連しています。プロジェクトは正常に実行されます(飛行機を飛ばす)。Xcode 9ストーリーボードウィンドウの位置自動保存

ここで私はNSWindowの "MainWindow"に自動保存の値を設定し、プロジェクトを実行し、ウィンドウのサイズを変更してから終了します。私は、自動保存をオンに設定して終了し、ウィンドウの位置がNSUserDefaultsを使用して保存されることを知っているので、私はターミナルでチェック:

$ defaults read com.koati.Bloks           ⏎ 
{ 
    "NSWindow Frame MainWindow" = "415 228 450 322 0 0 1280 777 "; 
} 

行動を期待だという。今度はもう一度プロジェクトを実行しますが、ウィンドウの位置は復元されません。ストーリーボードでGameViewControllerの関係を削除した場合、位置が保存されて正しく復元されるため、GameViewControllerはウィンドウのサイズと位置に何らかの影響を与えていると思います。 古いXcode with XIBsでは、このような問題はありませんでした。

EDIT:いくつかのテストをして、いくつかの後NSViewControllerNSViewSCNViewを交換して同じ結果を生成して、私は今、すべてでSceneKitに関連していないと思います。だから問題は、NSViewControllerがストーリーボードを介してNSWindowの内容に影響し、ウィンドウの位置とサイズに影響していると思います。

この問題を解決する方法を知っている人はいますか?

+0

私は同じ問題を経験し、あなたの観察に同意します。私はこの問題のためのテストプロジェクトを持っています。テンプレートからのデフォルト:Window-> View Controller-> Viewは、位置とサイズを保持します。 Window-> Split View Controller-> Viewに置き換えた場合、位置とサイズは保持されません(常にデフォルトの位置とサイズに戻ります)。 ウィンドウ - > View Controller-> View-> Container View-> Split View Controller-> Viewを再度実行すると、サイズと位置が保持されます。 –

答えて

0

奇妙なことに、この回答はhttps://stackoverflow.com/a/33707356/3736845 でも、XCode9でも適用されます。オートセーブネームのプログラム設定後(Swift4では少し異なる表記):

class MainWindowController: NSWindowController { 

    override func windowDidLoad() { 
    super.windowDidLoad() 

    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. 
    self.windowFrameAutosaveName = NSWindow.FrameAutosaveName.init(rawValue: "position") 
    } 
} 

アプリケーションの再起動時に位置の復元が開始されました。私はしかし、理解していない何

がデフォルトに保存されているものです:

defaults read com.ne.TestWindowPosition 
{ 
    "NSWindow Frame Position" = "510 428 901 322 0 0 1920 1177 "; 
    "NSWindow Frame position" = "0 0 901 322 0 0 1920 1177 "; 
} 

私はIBウィンドウ自動保存識別子でビットを果たした - あなたはそれがデフォルト(「位置」)に最初の行として表示されます見ますアプリケーションの起動時に正しく読み込まれないようです。 「位置」にオートセーブ名のマニュアルセットを追加した後、ウィンドウを移動すると変化しています。

+0

悪いことに、デフォルトのIB機能を実装するためだけに追加のNSWindowControllerを使用する必要があるということです。バグのように見えます。 –

関連する問題