初始 ViewController 未被调用
Initial ViewController not getting called
我是一名 iOS 开发人员,正在尝试了解 iOS 和 MacOS 之间的区别。
我有一个非常简单的 OSX 应用程序,它在 Yosemite 上运行良好,但在 Mavericks 上,-viewDidLoad 和其他 viewController 方法没有被调用,我最终得到空视图。
我想我的主要问题是,有什么在 Mavericks 中不可用而在 Yosemite 中阻止了如此基本的代码运行?有没有可能 Mavericks 不像 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,其中包含应用程序 Window(以及附加到 window 的视图,我在上面的代码中替换了它)。还有一个 ViewControler.xib 包含我的主要观点。
我该怎么做才能让这个应用程序在 Mavericks 上运行?
更新:看起来 NSViewController 在 Yosemite 之前没有 viewDidLoad 等。那么,我怎样才能最好地实现既适用于 Mavericks 又适用于 Yosemite 的东西?
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
....
}
正如 Tom Andersen 所指出的,awakeFromNib 可以被多次调用。一个更简洁的解决方案是覆盖 loadView 并在 Mavericks 和更早版本上自己调用 viewDidLoad。
- (void)loadView
{
[super loadView];
if (!self.isOnYosemiteOrLater) {
[self viewDidLoad];
}
}
我是一名 iOS 开发人员,正在尝试了解 iOS 和 MacOS 之间的区别。
我有一个非常简单的 OSX 应用程序,它在 Yosemite 上运行良好,但在 Mavericks 上,-viewDidLoad 和其他 viewController 方法没有被调用,我最终得到空视图。
我想我的主要问题是,有什么在 Mavericks 中不可用而在 Yosemite 中阻止了如此基本的代码运行?有没有可能 Mavericks 不像 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,其中包含应用程序 Window(以及附加到 window 的视图,我在上面的代码中替换了它)。还有一个 ViewControler.xib 包含我的主要观点。
我该怎么做才能让这个应用程序在 Mavericks 上运行?
更新:看起来 NSViewController 在 Yosemite 之前没有 viewDidLoad 等。那么,我怎样才能最好地实现既适用于 Mavericks 又适用于 Yosemite 的东西?
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
....
}
正如 Tom Andersen 所指出的,awakeFromNib 可以被多次调用。一个更简洁的解决方案是覆盖 loadView 并在 Mavericks 和更早版本上自己调用 viewDidLoad。
- (void)loadView
{
[super loadView];
if (!self.isOnYosemiteOrLater) {
[self viewDidLoad];
}
}