我有一个NSViewController的子类,该子类从 Nib 加载 View (带有initWithNibName:bundle:,它是该 Nib 的文件所有者)。

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

ios中的

  • :有viewDidLoad方法可以执行此操作
  • 在osx中​​:在雪豹中,没有像viewDidLoad这样的方法,但是在 Nib 的文件所有者上也调用awakeFromNib。

  • 所以我的问题是:
  • 是否在Lion的 Nib 文件所有者上也调用awakeFromNib?
  • 如果我使用awakeFromNib,是否需要致电[super awakeFromNib]? (NSViewController是否实现awakeFromNib吗?)
  • 如果答案1为是,这是一个好的解决方案吗? :



  • 如果答案1为否,这是一个好的解决方案吗? :
    - (void)viewDidLoad {
       // Initialize after nib loaded
    }
    
    #ifndef TARGET_OS_IPHONE
    - (void)loadView {
       // Call parent method
       [super loadView];
    
       // Simulate viewDidLoad method
       [self viewDidLoad];
    }
    #endif
    

    谢谢

    最佳答案

    这是我发现的:

  • 是的,awakeFromNib:也可以在Lion中文件的所有者中调用NSObject(通常对于新的Mountain Lion,它是相同的)。
  • 从OSX 10.6开始,awakeFromNib上有一个类别添加[super awakeFromNib],因此从任何子类中调用instancesRespondToSelector是安全的。对于10.6之前的OSX,我们可以使用awakeFromNib:来知道父类是否实现NSViewNSObject[super awakeFromNib]子类不得调用ojit_code。
  • 关于ios - 设置使用initWithNibName :bundle:?初始化的NSViewController的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10028389/

    10-12 14:46