NSWindowController awakeFromNib вызывается дважды - PullRequest
1 голос
/ 15 февраля 2012

У меня есть приложение, которое намеревается создать всплывающее окно при нажатии кнопки. Всплывающее окно загрузится из файла пера. И вот, кнопка нажата, и окно счастливо появляется. НО, его метод awakeFromNib вызывается дважды. Вот код:

Делегат приложения:

...

-(IBAction)myButton:(id)sender{

    printf("[settings]: button pressed\n");

    Config_SelectorSetup *selectorSetup = [[Config_SelectorSetup alloc] initWithWindowNibName:@"Config_SelectorSetup"];

    printf("about to load\n");

    [[selectorSetup window] makeKeyAndOrderFront:sender];

}

Config_SelectorSetup.m

- (id) initWithWindowNibName:(NSString *)windowNibName{

    printf("[initWithWindowNibName]\n");

    if( self = [super initWithWindowNibName:windowNibName] ){

        ...

    }

    return self;

}

- (void)awakeFromNib{

    printf("[awakeFromNib]\n");

    [self startScreen];
}

А вот и вывод:

[settings]: button pressed
[initWithWindowNibName]
about to load
[awakeFromNib]
[awakeFromNib]

Анализируя стек вызовов, первый раз он вызывается [NSObject performSelector:], второй - [NSIBObjectData nibInstantiateWithOwner:topLevelObjects:].

Может кто-нибудь сказать, что я делаю не так?

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 февраля 2012

Содержит ли Config_SelectorSetup.xib объект Config_SelectorSetup, кроме владельца файла?

Попробуйте войти self в awakeFromNib -

NSLog(@"self = %p", self);

Печатается ли каждый раз один и тот же адрес?Если он печатает разные адреса, скорее всего, у вас есть Config_SelectorSetup объект в вашем кончике.

0 голосов
/ 15 февраля 2012

Сколько торговых точек у вас в вашем классе и что это за подклассы? Я обнаружил, что с некоторыми подклассами (например, NSDocument), если у вас есть несколько подключенных розеток, каждый объект пера будет запускать метод awakeFromNib при загрузке. NSLog ваших торговых точек, чтобы увидеть, выводят ли они ноль или адрес.

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