viewDidLoad在NSViewController?
在iPhone中,我做UIViewController viewDidLoad并写一些设置代码来设置视图。
但我怎么能在NSViewController中做到这一点?
我已经试过loadView,但它不工作…也许我做错了什么,我不知道…
PS:我刚刚开始使用OSX / iOS编程,所以对不起,如果我问一些愚蠢的:(
从OS X 10.10开始, viewDidLoad
在NSViewController
上可用并受支持。
在此之前,你必须在雪豹的释放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
, -viewDidAppear
, NSViewController
。 有关更多信息,请参阅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]; }