我有一个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,所以这可能是一个错误,但我认为项目模板没有改变。