viewDidLoad在NSViewController?

在iPhone中,我做UIViewController viewDidLoad并写一些设置代码来设置视图。
但我怎么能在NSViewController中做到这一点?
我已经试过loadView,但它不工作…也许我做错了什么,我不知道…

PS:我刚刚开始使用OSX / iOS编程,所以对不起,如果我问一些愚蠢的:(

从OS X 10.10开始, viewDidLoadNSViewController上可用并受支持。

在此之前,你必须在雪豹的释放logging中find这个金块:

对于在NSViewController中寻找-viewWillLoad和-viewDidLoad方法的人的build议

即使NSWindowController具有-windowWillLoad和-windowDidLoad方法来覆盖Mac OS 10.5中引入的NSViewController类,但没有相应的-viewWillLoad和-viewDidLoad方法。 您可以重写 – [NSViewController loadView]来自定义在视图控制器加载nib之前或之后立即发生的事情。

我在发表我的评论几分钟之内就知道了。 添加我的发现作为答案,因为这是在文档中缺less的示例。 下面的代码会给你你想要的viewDidLoad方法。 它很容易,我想知道为什么苹果还没有在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

从OSX 10.10(Yosemite)开始,现在在-viewDidLoad有一个-viewDidLoad-viewWillAppear-viewDidAppearNSViewController 。 有关更多信息,请参阅WWDC 2014 – 在OS X会话中的Storyboard和Controllers ,了解每次调用的时间等。

以下是关于-viewDidLoad的10.10头文件中的相关位:

/* 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);

你为什么不试试这个:

 - (void) awakeFromNib{ //setup code NSLog(@"hello there"); } 

它看起来像10.10,viewDidLoad现在在NSViewController中。

嗯其实我也会这样做…

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