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.