NSPanel
奇妙な動作に問題があり、この動作を示すサンプル アプリを作成しました。
アプリは Xcode 4 のテンプレートから生成され、単純にパネルを作成し、ボタンの押下に基づいてパネルを開閉します。
私が観察した奇妙な動作:
- Lion では、パネルを初めて開いた後、パネルはメイン ウィンドウをたどります。これは正しい動作です。ただし、閉じてから再度開くと、メインウィンドウに追従しなくなります。
- Snow Leopard では、パネルを閉じるとメイン ウィンドウも閉じられます。
編集:明確にするために。私が期待する動作は、メイン ウィンドウが移動されたときにパネルがメイン ウィンドウに追従することです。パネルが閉じられ、その後再び開かれた後も、それは真実です。また、Snow Leopard と Lion でパネルとメイン ウィンドウが同じように動作することも期待していました。
コードの重要な部分は次のとおりです。
@implementation MyAppDelegate
- (void)dealloc
{
[_panel release];
[super dealloc];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
_panel = [[NSPanel alloc]
initWithContentRect:NSMakeRect(400, 400, 200, 100)
styleMask:NSUtilityWindowMask|NSClosableWindowMask|NSTitledWindowMask
backing:NSBackingStoreBuffered
defer:YES];
[_panel setTitle:@"A Panel"];
}
- (IBAction)openPanel:(id)sender
{
[_panel setParentWindow:[self window]];
[_panel makeKeyAndOrderFront:sender];
}
- (IBAction)closePanel:(id)sender
{
[_panel orderOut:sender];
}
@end
注: メソッドに不要なsetParentWindow
呼び出しを追加しopenPanel
て、パネルが開かれるたびに親ウィンドウがリセットされることをアサートしました。しかし、違いはありませんでした。
誰かが私が間違っていることを説明してもらえますか?
編集:実装ファイルに欠落があることについて混乱があり@synthesize window = _window
ますが、メモリリークの動作をテストするために作成した別のプロジェクトサンプルを開いたところ、そこにもありません。私は Xcode 4.4 を使用しているため、バグである可能性がありますが、プロジェクト テンプレートは変更されていないと思います。