【发布时间】:2012-04-29 20:49:10
【问题描述】:
我有一个 NSPanel 行为异常的问题,我创建了一个 Sample App 来展示这种行为。
应用程序是从 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
注意:我在openPanel方法中添加了不必要的setParentWindow调用,以断言每次打开面板时都会重置父窗口;然而这并没有什么不同。
谁能解释一下我做错了什么?
编辑:对于实现文件中缺少的@synthesize window = _window 存在一些混淆,但我刚刚打开了另一个项目示例,该示例是我为测试内存泄漏行为而创建的,但它也不存在.我使用的是 Xcode 4.4,所以这可能是一个错误,但是我不认为项目模板已经改变。
【问题讨论】:
标签: objective-c cocoa parent nspanel