View Controller дважды вызывает awakeFromNib - PullRequest
4 голосов
/ 11 ноября 2010

Я сталкиваюсь с этой странной проблемой, и я не уверен, где я иду не так.

Ситуация:

У меня есть класс MainWindowController, который будет загружать правильные кончики, чтобы бытьотображается.Я создал объект и изменил его на класс MainWindowController в IB и поместил его с пером «MainWindowView».

Так что в основном перо «MainWindowView» имеет собственный вид и несколько кнопок сбоку, так что пользовательМожно выбрать, какой вид загрузить, и он загрузит другой соответствующий кончик.Я спрятал главное меню во время запуска в IB, поэтому он загружает только MainWindowView с другими файлами пера.

Однако при отладке, когда я помещал NSLog в awakeFromNib MainWindowController, я увидел, что в консоли это былоПри вызове дважды.

в моем проекте у меня есть класс startupController вместе с MainMenu.xib со следующим кодом.

startUpController.h:

#import <Cocoa/Cocoa.h>
#import "MainWindowController.h"

@interface startupController : NSObject {
 MainWindowController *myWindowController;
}
@end

startUpController.m:

#import "startupController.h"
@implementation startupController
-(void)awakeFromNib {
 [super init];
 if(myWindowController == nil)
 myWindowController = [[MainWindowController alloc] initWithWindowNibName:@"MainWindowView"];
 [myWindowController showWindow:self];
}
@end

любая помощь приветствуется.спасибо.

1 Ответ

7 голосов
/ 11 ноября 2010

Похоже, вы создаете два объекта MainWindowController, поэтому awakeFromNib будет вызываться один раз для каждого.

Ваш awakeFromNib в методе startupContoller создает объект MainWindowController и инициализирует его с помощью пера MainWindowView.Если вы также добавили объект к этому пиру и установили его тип MainWindowController, при загрузке пера будет создан другой объект MainWindowController.

Вам следует удалить объект MainWindowController из пера MainWindowView и вместо этого установитьтип объекта «Владелец файла» - MainWindowController.(MainWindowController должен быть подклассом NSWindowController). Любые соединения, которые вы подключаете к созданному вами объекту, должны быть подключены к владельцу файла.

Кроме того, вы не должны вызывать [super init] в awakeFromNib.Вы должны вызывать [super init] только в методе init.

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