NSWindowController: loadWindow загружает окно из пера, но showWindow: ничего не делает - PullRequest
2 голосов
/ 22 августа 2010

У меня есть подкласс NSWindowController с именем _PreferencesWindowController со следующей реализацией -

@synthesize window;

- (id)init {

 self = [super initWithWindowNibName:@"PreferencesWindow"];
 if (!self) return nil;

 return self;
}

И я попытался показать окно в _PreferencesWindowController, используя следующий код -

_preferencesWindowController = [[_PreferencesWindowController alloc] init];
[_preferencesWindowController showWindow:nil];

Это ничего не делает, и я проверил _preferencesWindowController.window это nil из отладчика.

Однако, если я позвоню loadView на _preferencesWindowController, окно может быть загружено и видно; _preferencesWindowController.window больше не имеет нулевого значения -

[_preferencesWindowController loadWindow];

Я посмотрел документацию Apple по NSWindowController, в которой говорится, что «вы никогда не должны напрямую вызывать loadWindow», вместо этого следует использовать showWindow:. Мне интересно, что я мог упустить из-за вышеупомянутого поведения, которое я видел.

1 Ответ

2 голосов
/ 22 августа 2010

ОК. Я решил эту проблему, посмотрев на заголовочный файл NSWindowController.

Проблема в моем заголовочном файле для _PreferencesWindowController -

@interface _PreferencesWindowController : NSWindowController <NSToolbarDelegate> {

    NSWindow *window;

}

@property (assign) IBOutlet NSWindow *window;

@end

При удалении объявления @property и измененииМетод NSWindow *window ivar to IBOutlet NSWindow *window, showWindow: теперь работает без сбоев.

Объявление свойства должно было привести к неопределенному поведению в методе showWindow: в реализации NSWindowController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...