gpt4 book ai didi

ios - 设置使用 initWithNibName :bundle:? 初始化的 NSViewController 的最佳方法

转载 作者:可可西里 更新时间:2023-11-01 03:15:11 25 4
gpt4 key购买 nike

我有一个 NSViewController 的子类,它从 nib 加载它的 View (使用 initWithNibName:bundle: 并且它是该 nib 的文件所有者)。

我需要在加载 nib 后进行一些初始化,我希望我的代码是最兼容的:

  • 在 ios 中:有 viewDidLoad 方法可以做到这一点
  • 在 osx 中:在雪豹中,没有像 viewDidLoad 这样的方法,但是 awakeFromNib 也会在 nib 的文件所有者上调用

所以我的问题是:

  1. 是否也对 Lion 中 Nib 的文件所有者调用了 awakeFromNib?
  2. 如果我使用 awakeFromNib,我需要调用 [super awakeFromNib] 吗? (NSViewController 是否实现了 awakeFromNib ?)
  3. 如果答案 1 是肯定的,这是一个好的解决方案吗? :
- (void)initAfterNibLoaded {
...
}

- (void)viewDidLoad {
// Code for ios
[self initAfterNibLoaded];
}

- (void)awakeFromNib {
// Code for osx

// Not sure if necessary
[super awakeFromNib];

[self initAfterNibLoaded];
}

如果答案 1 是否定的,这是一个好的解决方案吗? :

- (void)viewDidLoad {
// Initialize after nib loaded
}

#ifndef TARGET_OS_IPHONE
- (void)loadView {
// Call parent method
[super loadView];

// Simulate viewDidLoad method
[self viewDidLoad];
}
#endif

谢谢

最佳答案

这是我发现的:

  1. 是的,awakeFromNib:也在 Lion 的 nib 文件所有者上调用(通常对于新的 Mountain Lion 也是如此)。

  2. 从 OSX 10.6 开始,NSObject 上有一个类别添加了 awakeFromNib,因此可以安全地调用 [super awakeFromNib] 来自任何子类。对于10.6之前的OSX,我们可以使用instancesRespondToSelector:父类是否实现了awakeFromNibNSView或者NSObject 子类不得调用 [super awakeFromNib]

关于ios - 设置使用 initWithNibName :bundle:? 初始化的 NSViewController 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com