NSViewController中的viewDidLoad?

Tes*_*esX 38 macos cocoa objective-c

在iPhone中我做UIViewController viewDidLoad并编写一些设置代码来设置视图.
但是我怎么能在NSViewController中做到这一点?
我已尝试使用loadView但它不起作用...也许我做错了什么我不知道...

PS:我刚刚开始使用OSX/iOS编程,很抱歉,如果我问一些愚蠢的东西:(

Chi*_*tel 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];
    }
}
Run Code Online (Sandbox Code Playgroud)

原始来源:http://www.cocoabuilder.com/archive/cocoa/195802-garbage-collection-leaks-and-drains.html

  • 这可能带来的一个危险是Apple可能有一天会将`-viewWillLoad`和`-viewDidLoad`方法添加到`NSViewController`中.如果是这样,那么您对这些方法的覆盖将被调用两次. (7认同)

Mik*_*lah 41

从OS X 10.10开始,viewDidLoad可以使用并受支持NSViewController.

在此之前,你必须在Snow Leopards的发行说明中使用这个金块:

为在NSViewController中寻找-viewWillLoad和-viewDidLoad方法的人提供建议

尽管NSWindowController具有-windowWillLoad和-windowDidLoad方法,您可以覆盖Mac OS 10.5中引入的NSViewController类,但没有相应的-viewWillLoad和-viewDidLoad方法.您可以覆盖 - [NSViewController loadView]来自定义在视图控制器完成nib加载之前或之后立即执行的操作.

  • -1; 过时了!链接的文章不再讨论这个问题.:( (3认同)
  • @arufian也许你忘了挂上`view`插座? (2认同)

mz2*_*mz2 9

如OSX 10.10(约塞米蒂)的,现在有一个-viewDidLoad,-viewWillAppear,-viewDidAppear,-viewWillDisappearNSViewController.有关详细信息,请参阅WWDC 2014 - OS X会话中的故事板和控制器,以了解何时调用它们等等.

这是10.10标题文档中的相关位 -viewDidLoad:

加载视图后调用.对于在代码中创建的视图控制器,这是在-loadView之后.对于从nib取消归档的视图控制器,这是在设置视图之后.默认不做任何事.

- (void)viewDidLoad NS_AVAILABLE_MAC(10_10);
Run Code Online (Sandbox Code Playgroud)


Jes*_*sus 5

你为什么不试试这个:

- (void)awakeFromNib {
    //setup code
    NSLog(@"hello there");
}
Run Code Online (Sandbox Code Playgroud)