2016-11-30 1 views
0

목표는 NSWindow를 다른 NSWindow에 상대적으로 배치하여 부모를 드래그하면 자식도 함께 이동하도록하는 것입니다.NSWindow를 다른 윈도우의 자식으로 추가했지만 지속하지 않습니다.

디버거를 둘러 보았을 때 NSWindow 육아 관계가 올바르게 설정되어 있음을 알 수있었습니다. 그러나, 나중의 코드에서 부모를 가져 오려고하면 같은 NSWindow가 nil을 반환합니다. removeChildWindow에 대한 명시 적 호출만으로 육아를 제거 할 수 없다는 것을 알았습니다. 육아를 잘못 설정하고있는 것처럼 여기에 다른 작업이 없다면 말입니다. NSWindow가 부모/자녀 관계를 잃을 수있는 다른 방법이 있습니까?

someFunction(NSWindow* parentWindow) { 
    NSWindow* wnd = [[NSWindow alloc] initWithContentRect:frame 
        styleMask:NSBorderlessWindowMask 
        backing:NSBackingStoreBuffered 
        defer:NO]; 
    [parentWindow addChildWindow:wnd ordered:NSWindowAbove]; 
} 

이상 :

anotherFunction(NSWindow* window) { 
    NSWindow* parentWindow = [window parentWindow]; // debugger shows nil 
} 
+0

은'window' nil입니까? – Willeke

+0

아니요, wnd 이전과 같은 창 – damonkashu

+1

더 많은 정보를 제공해야합니다. parentHandle 또는 다른 객체는 parentWindow를 유지합니까? 귀하가 "나중에"(부모 창은 디버거에 의해 없음으로 표시됨)로 설명하는 지점에서 두 창을 모두 볼 수 있습니까? – elasticthreads

답변

0

내가 false로 윈도우 가시 변경하는 호출했다 보인다

[wnd setIsVisible:false]; 

을 내가 다시 그 부모를 읽는 시도 할 때 될 수있을 테니까요 그 무. 누가 그것을 짐작 했겠는가? 이것은 문서화 된 것처럼 보이지 않는다.

+0

'- [NSWindow setIsVisible :]'은 이상한 방법입니다. 실제로 NSWindow의 핵심 부분은 아닙니다. 스크립트 지원을위한'NSWindow'의 카테고리의 일부입니다 (NSWindowScripting.h 참고). 기본적으로 창을 정렬하는 래퍼입니다. 창에 대한 다른 "가시성"개념은 없습니다. 어쨌든, 그 행동은 문서화되어 있습니다. "NSWindow - Child Windows Ordering Out"아래의 [10.7 AppKit 릴리스 노트] (https://developer.apple.com/library/prerelease/content/releasenotes/AppKit/RN-AppKitOlderNotes/index.html#X10_7Notes)를 참조하십시오. –

관련 문제