我做UIViewController viewDidLoad并编写一些设置代码来设置视图 但是我怎么能在NSViewController中做到这一点? 我已尝试使用loadView但它不起作用... 也许我做错了什么我不知道...
PS:我刚开始使用OSX / iOS编程,很抱歉,如果我问一些愚蠢的话:(答案 0 :(得分:49)
我在发表评论的几分钟内就明白了。将我的发现添加为答案,因为它是文档中缺少的一个示例。下面的代码将为您提供所需的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
答案 1 :(得分:41)
自OS X 10.10起,viewDidLoad
可以使用并NSViewController
支持{{1}}。
在此之前,你必须在Snow Leopards'release notes中使用这个金块:
为在NSViewController中寻找-viewWillLoad和-viewDidLoad方法的人提供建议
即使NSWindowController具有-windowWillLoad和-windowDidLoad方法,您可以覆盖Mac OS 10.5中引入的NSViewController类,但没有相应的-viewWillLoad和-viewDidLoad方法。您可以覆盖 - [NSViewController loadView]来自定义在视图控制器完成nib加载之前或之后立即发生的事情。
答案 2 :(得分:9)
从OSX 10.10(Yosemite)开始,-viewDidLoad
中现在有-viewWillAppear
,-viewDidAppear
,-viewWillDisappear
,NSViewController
。有关详细信息,请参阅WWDC 2014 - Storyboards and Controllers on OS X session,了解每个人何时被调用等等。
以下是关于-viewDidLoad:
加载视图后调用。对于在中创建的视图控制器 代码,这是在-loadView之后。对于从a取消归档的视图控制器 nib,这是在视图设置之后。默认不做任何事。
- (void)viewDidLoad NS_AVAILABLE_MAC(10_10);
答案 3 :(得分:5)
为什么不试试这个:
- (void) awakeFromNib{
//setup code
NSLog(@"hello there");
}
答案 4 :(得分:0)
看起来在10.10中,viewDidLoad现在在NSViewController中。
答案 5 :(得分:-5)
- (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];
}