アプリケーションでカスタムシートを表示しようとしていますが、何か問題があると思います。すべてがうまく機能しているように見えますが、私にはかなり奇妙な副作用があります。(理解するのに何時間もかかりました)。アプリケーションでシートを表示するたびに、アプリケーションデリゲートがシートのインスタンスに設定されるため、コントローラーがデリゲートとして設定解除され、あらゆる種類の問題が発生することがわかりました。
FailureSheet.xibというNIBファイルを作成しました。インターフェイスを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デリゲート]をログに記録すると、正しいのは<Controller-0x012345>です。次に、このコードを実行してシートがアップした後、再度ログに記録すると、<FailureSheet-0xABCDEF>になります。
私がここで何を間違っているのかわからない-何かアイデアはありますか?