我是iOS开发人员,正在尝试了解iOS和MacOS之间的差异。
我有一个非常简单的OSX应用程序在Yosemite上正常运行但是在Mavericks上,-viewDidLoad和其他viewController方法没有被调用,我最终得到一个空视图。
我想我的主要问题是,在小牛队中有什么不可用,并且在优胜美地中可以防止这样一个基本的代码操作?小牛队有可能不像Yosemite那样支持NSViewControllers吗?
以下是代码:
- (void)setupViewController
{
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.contentView = self.viewController.view;
self.viewController.view.frame = ((NSView*)self.window.contentView).bounds;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
if (self.viewController == nil)
[self setupViewController];
[self.window makeKeyAndOrderFront:self];
}
应用程序使用MainMenu.xib设置,其中包含应用程序窗口(以及附加到该窗口的视图,我在上面的代码中替换了该视图)。还有一个ViewControler.xib,它包含我的主视图。
我该怎么办才能让这个应用程序在Mavericks上运行?
UPDATE :在优胜美地之前,看起来NSViewController没有viewDidLoad等。那么,我如何才能最好地实现适用于小牛队和优胜美地的东西?
答案 0 :(得分:2)
在10.10,似乎不止一次调用awakeFromNib
。检查OS版本可能更好,如下所示。
- (void)awakeFromNib {
if (![self respondsToSelector:@selector(viewWillAppear)]) {
// setup here on 10.9
....
}
}
- (void)viewDidLoad {
[super viewDidLoad];
// setup here on 10.10
....
}
答案 1 :(得分:0)
正如汤姆安德森所指出的,可以多次调用awakeFromNib。一个更干净的解决方案是覆盖loadView并在Mavericks和更早版本上自己调用viewDidLoad。
- (void)loadView
{
[super loadView];
if (!self.isOnYosemiteOrLater) {
[self viewDidLoad];
}
}