2016-11-30 14 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を保持しますか?両方のウィンドウは、あなたが "後で"(親ウィンドウはデバッガによってnilとして表示されます)と記述したポイントで表示されますか? – 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)を参照してください。 –

関連する問題