viewDidLoad в NSViewController? - PullRequest
       22

viewDidLoad в NSViewController?

36 голосов
/ 06 августа 2010

в iPhone Я делаю UIViewController viewDidLoad и пишу некоторый установочный код для настройки представления.
Но как я могу это сделать в NSViewController?
Я пробовал с loadView, но он не работает ... Может бытьЯ делаю что-то не так, я не знаю ...

PS: Я только начал с программированием OSX / iOS, так что извините, если я спрошу что-то глупое: (

Ответы [ 6 ]

49 голосов
/ 23 февраля 2011

Я понял это в течение нескольких минут после публикации моего комментария. Добавив мой вывод в качестве ответа, потому что это пример, который отсутствует в документации. Приведенный ниже код даст вам нужный метод viewDidLoad. Это так просто, что мне интересно, почему Apple еще не внедрила его в OS X.

- (void)viewWillLoad {
    if([NSViewController instancesRespondToSelector:@selector(viewWillLoad)]) {
        [super viewWillLoad];
    }

    ...
}

- (void)viewDidLoad {
    if([NSViewController instancesRespondToSelector:@selector(viewWillLoad)]) {
        [super viewDidLoad];
    }
}

- (void)loadView {
    BOOL ownImp = ![NSViewController instancesRespondToSelector:@selector(viewWillLoad)];

    if(ownImp) {
        [self viewWillLoad];
    }

    [super loadView];

    if(ownImp) {
        [self viewDidLoad];
    }
}

Оригинальный источник: http://www.cocoabuilder.com/archive/cocoa/195802-garbage-collection-leaks-and-drains.html

41 голосов
/ 06 августа 2010

Начиная с OS X 10.10, viewDidLoad доступен и поддерживается на NSViewController.

До этого вам нужно было пройти мимо этого самородка в примечаниях к выпуску Snow Leopards :

Совет для людей, которые ищут методы -viewWillLoad и -viewDidLoad в NSViewController

Хотя NSWindowController имеет методы -windowWillLoad и -windowDidLoad для переопределения класса NSViewController, представленного в Mac OS 10.5, нет соответствующих методов -viewWillLoad и -viewDidLoad. Вы можете переопределить - [NSViewController loadView], чтобы настроить то, что происходит непосредственно перед или сразу после загрузки пера, выполняемого контроллером представления.

9 голосов
/ 07 июня 2014

Начиная с OSX 10.10 (Yosemite), теперь есть -viewDidLoad, -viewWillAppear, -viewDidAppear, -viewWillDisappear в NSViewController.См. WWDC 2014 - Раскадровки и контроллеры в сеансе OS X для получения дополнительной информации, чтобы узнать, когда каждый из них вызывается и т. Д.1010 *

Вызывается после загрузки представления.Для контроллеров представления, созданных в коде, это после -loadView.Для контроллеров представления, разархивированных с пера, это после того, как представление установлено.По умолчанию ничего не делает.

- (void)viewDidLoad NS_AVAILABLE_MAC(10_10);
5 голосов
/ 14 мая 2014

почему бы вам не попробовать это:

- (void) awakeFromNib{

//setup code
NSLog(@"hello there");
}
0 голосов
/ 28 августа 2014

Похоже, что в 10.10, viewDidLoad теперь в NSViewController.

0 голосов
/ 05 января 2012

хм на самом деле я бы тоже так сделал ...

- (void)viewWillLoad {

    if (! bool_viewwillload) {

        // execute the code
        bool_viewwillload = true;
    }
}

- (void)viewDidLoad {
    if (! bool_viewdidload) {

        // execute the code
        bool_viewdidload = true;
    }
}

и затем просто сделал бы вид загрузки вот так

- (void)loadView {

    [self viewWillLoad];

    [super loadView];

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