2017-11-07 1 views
1

Xcode 9 (SceneKit 기술이 적용된 macOS 게임)에서 새로운 프로젝트를 시작합니다. 나는 과 NSWindow 및 관련 GameViewControllerSCNView을 포함하는 스토리 보드를 가지고 있습니다. 프로젝트가 잘 실행됩니다 (비행기를 돌립니다).Xcode 9 스토리 보드 창 위치 자동 저장

이제 스토리 보드에서 NSWindow의 "MainWindow"로 자동 저장 값을 설정하고 프로젝트를 실행 한 다음 창 크기를 조정하고 종료하십시오. 나는 자동 저장에 대한 설정과 창 위치가 NSUserDefaults을 사용하여 저장됩니다 종료 것을 알고, 그래서 터미널 체크인 : 예상 된 동작 것

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

. 이제 프로젝트를 다시 실행하지만 창 위치가 복원되지는 않습니다. 스토리 보드에서 GameViewController 관계를 제거하면 위치가 저장되고 올바르게 복원되므로 GameViewController은 어떻게 든 창 크기와 위치에 영향을 미친다 고 가정합니다. XIB가있는 이전 Xcode에는 이러한 문제가 없었습니다.

편집 : 몇 가지 검사를하고 일부 후, 나는 지금이 NSViewController이 같은 결과를에 NSViewSCNView 교체로, 모든 SceneKit 관련이 없습니다 생각합니다. 그래서 문제는 NSViewController이 스토리 보드를 통해 NSWindow에 연결되어있어 윈도우 위치와 크기에 영향을 미친다는 것입니다.

아마도이 문제를 해결하는 방법을 아는 사람이 있습니까?

+0

동일한 문제가 발생하여 귀하의 관찰에 동의합니다. 나는이 문제에 대한 테스트 프로젝트를 가지고있다. 템플릿의 기본값 : 창 ->보기 컨트롤러 ->보기는 위치와 크기를 유지합니다. Window-> Split View Controller-> View로 바꾸면 위치 및 크기가 보존되지 않습니다 (항상 기본 위치 및 크기로 돌아 감). Window-> 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") 
    } 
} 

그것은 응용 프로그램의 재시작 위치를 복원하기 시작했다. 나는 그러나 이해하지 못하는 어떤

기본값으로 저장되는 내용이다 : 나는 IB 창 자동 저장 식별자 비트를 연주

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 "; 
} 

- 당신이 기본값에서 첫 번째 줄 ("위치")로 표시 참조 응용 프로그램 시작시 제대로 읽히지 않는 것 같습니다. "위치"에 자동 저장 이름의 수동 세트를 추가 한 후에 - 창을 이동할 때 이것이 바뀌고 있습니다.

+0

나쁜 점은 기본 IB 기능을 구현하기 위해 추가 NSWindowController를 사용해야한다는 것입니다. 버그 같아. –