Подтвердить что ты не робот

ViewDidLoad в NSViewController?

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Я понял это в течение нескольких минут после публикации моего комментария. Добавление моего вывода в качестве ответа, потому что это пример, отсутствующий в документах. Приведенный ниже код предоставит вам метод 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

Ответ 3

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

Здесь соответствующий бит из заголовка 10.10 сообщает о -viewDidLoad:

/* Called after the view has been loaded. For view controllers created in code, this is after -loadView. For view controllers unarchived from a nib, this is after the view is set. Default does nothing. */ - (void)viewDidLoad NS_AVAILABLE_MAC(10_10);

Ответ 4

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

- (void) awakeFromNib{

//setup code
NSLog(@"hello there");
}

Ответ 5

Похоже, что в 10.10 viewDidLoad теперь находится в NSViewController.

Ответ 6

hmm на самом деле я бы тоже сделал это...

- (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];
}