我有一个NSViewController的子类,它从一个nib加载它的视图(使用initWithNibName:bundle:它是该nib的文件所有者)。
我需要在加载nib之后进行一些初始化,并且我希望我的代码最兼容:
所以我的问题是:
- (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
谢谢
答案 0 :(得分:4)
这是我发现的:
是的,awakeFromNib
:也会在Lion的nib文件的所有者上调用(通常对于新的Mountain Lion来说也是如此)。
从OSX 10.6开始,NSObject
上有一个类别添加awakeFromNib
,因此从任何子类调用[super awakeFromNib]
都是安全的。对于10.6之前的OSX,我们可以使用instancesRespondToSelector
:来了解父类是否实现awakeFromNib
,NSView
或NSObject
子类不能调用[super awakeFromNib]
。< / p>