我对iOS很有经验,但对MacOS X Cocoa来说仍然非常环保。
我正在使用InterfaceBuilder来创建视图层次结构。这与MainMenu NIB分开。
我也在创建一个NSViewController。由于Mac OS X的工作方式,此控制器对象不直接附加到视图层次结构。
我连接IB中的所有各个出口,使视图层次结构成为视图控制器的视图对象,并附加一些包含的控件等等。
现在,问题出在这里:在iOS中,我只是从故事板中实例化控制器,整个套件和kaboodle随之而来。没有大惊小怪,没有麻烦。
在Mac OS X中,我可以创建视图控制器:
MyAwesomeViewControllerClass *pViewController = [[MyAwesomeViewControllerClass alloc] initWithNibName:nil bundle:nil];
我找不到iOS OS中的instantiateViewControllerWithIdentifier:方法的Mac OS X模拟。这才是我真正需要的。
如果我需要单独实例化它们,我需要弄清楚如何做到这一点。
我不想以编程方式执行此操作。有很多自动布局的东西,这是一个实质性的(和精致的)意大利面条。
最有可能的是,我正在解决这个问题,并想购买五块钱的线索,Alex ......
答案 0 :(得分:1)
您需要将调用的NIB名称传递给initWithNibName:bundle:
:
MyAwesomeViewControllerClass *pViewController = [[MyAwesomeViewControllerClass alloc]
initWithNibName:@"MyAwesomeViewControllerClass"
bundle:nil];
我通常会覆盖init
:
- (instancetype)init {
// NOTE: Not [self initWithNibName:bundle:] !!!
self = [super initWithNibName:@"MyAwesomeViewControllerClass" bundle:nil];
if (self) {
// Other init
}
return self;
}
然后:
MyAwesomeViewControllerClass *pViewController =
[[MyAwesomeViewControllerClass alloc] init];
更容易输入,并且不要求视图控制器的用户知道正在使用的NIB(即使很明显)。