我正在尝试在我的应用程序中显示自定义工作表,但我认为我做错了什么。虽然一切seems为了工作得很好,我有一个相当奇怪的副作用。 (花了几个小时才弄清楚)。事实证明,每次我在应用程序中显示工作表时,应用程序委托都会设置为工作表的实例,因此我的控制器得到unset作为造成各种问题的代表。
我创建了一个 NIB 文件,将其命名为 FailureSheet.xib。我在 IB 中布置了界面,然后创建了一个名为“FailureSheet.m”的“NSWindowController”子类,并将其设置为文件的所有者。这是我的 FailureSheet 类:
#import "FailureSheet.h"
@implementation FailureSheet // extends NSWindowController
- (id)init
{
if (self = [super initWithWindowNibName:@"FailureSheet" owner:self])
{
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (IBAction)closeSheetTryAgain:(id)sender
{
[NSApp endSheet:[self window] returnCode:1];
[[self window] orderOut:nil];
}
- (IBAction)closeSheetCancel:(id)sender
{
[NSApp endSheet:[self window] returnCode:0];
[[self window] orderOut:nil];
}
- (IBAction)closeSheetCancelAll:(id)sender
{
[NSApp endSheet:[self window] returnCode:-1];
[[self window] orderOut:nil];
}
@end
这里没有什么复杂的事情发生。现在,这就是我在“Controller”类中显示 FailureSheet 的方式:
sheet = [[FailureSheet alloc] init];
[NSApp beginSheet:[sheet window]
modalForWindow:window
modalDelegate:self
didEndSelector:@selector(failureSheetDidEnd:etc:etc:)
contextInfo:nil];
现在,如果我在显示工作表之前记录 [NSApp delegate] 是什么,则它是正确的 。然后,运行此代码并且我的工作表已启动后,如果我再次记录它,则它是 。
不确定我在这里做错了什么 - 有什么想法吗?
这是“我是个白痴”的答案之一。
事实证明,我在某个时候不小心在工作表的 NIB 文件中在应用程序和文件所有者 (FailureSheet) 之间建立了连接,并将其设置为委托。因此,每次加载它时,它都会覆盖 MainMenu NIB 文件中现有的委托连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)