ViewDidLoad в NSViewController?
в iPhone Я делаю UIViewController viewDidLoad и пишу код установки для настройки представления.
Но как я могу это сделать в NSViewController?
Я пробовал с loadView, но он не работает...
Может быть, я что-то делаю неправильно, я не знаю...
PS: Я только начинал с программирования OSX/iOS, поэтому извините, если я попробую что-то глупое: (
Ответы
Ответ 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];
}