View Controller вызывает awakeFromNib дважды

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

Ситуация:

У меня есть класс 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 ответ

Решение

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

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

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

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

Другие вопросы по тегам