Я пытаюсь отобразить пользовательский лист в своем приложении, но я думаю, что я делаю что-то не так. Хотя все кажется работает нормально, у меня есть довольно странный побочный эффект. (что потребовалось несколько часов, чтобы выяснить). Оказывается, что каждый раз, когда я отображаю лист в своем приложении, делегату Application присваивается экземпляр листа, поэтому мой Контроллер получает unset в качестве делегата, вызывающего все виды проблем.
Я создал файл NIB, который я назвал FailureSheet.xib. Я выложил свой интерфейс в IB, а затем создал подкласс NSWindowController с именем FailureSheet.m, который я установил для владельца файла. Вот мой класс 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
Ничего сложного здесь не происходит. Теперь вот как я отображаю FailureSheet в своем классе 'Controller':
sheet = [[FailureSheet alloc] init];
[NSApp beginSheet:[sheet window]
modalForWindow:window
modalDelegate:self
didEndSelector:@selector(failureSheetDidEnd:etc:etc:)
contextInfo:nil];
Теперь, если я запишу, что [делегат NSApp] перед отображением моего листа, это , что правильно. Затем, после запуска этого кода и моего листа, если я регистрирую его снова, это .
Не уверен, что я здесь делаю неправильно - есть идеи?