调用超类的awakeFromNib

问题描述:

我安装了Xcode 8.0 beta(8S128d)。现在我有一些警告与消息:调用超类的awakeFromNib

Method possibly missing a [super awakeFromNib] call 

在所有awakeFromNib方法。 在这种情况下,我需要调用这个超类的方法?

+0

的可能的复制[?我应该叫\ [超级awakeFromNib \](http://*.com/questions/3989665/should-i -call-super-awakefromnib) – new2ios

Apple

你必须调用超级实现awakeFromNib的给父母 类执行任何额外的初始化他们 需要的机会。尽管此方法的默认实现没有任何功能,但许多UIKit类都提供了非空实现。您可能在您自己的 awakeFromNib方法的任何时候调用超级实现。

的Xcode 8之前,有这个没有严格的编译器的要求,howeever苹果已与Xcode8改变这一点,编译器将其视为错误,如果调用(在SWIFT或super.awakeFromNib()[super awakeFromNib]在awakeFromNib丢失。

如此迅速的版本将是这个样子:

func awakeFromNib() { 
    super.awakeFromNib() 

    ... your magical code ... 
} 
+0

谢谢!与文档链接的最佳答案! –

+0

这个命令不重要吗?任何人为什么想在最后完成'[super awakeFromNib]'而不是在你自己实现它的开始? – micnguyen

+0

@micnguyen值得注意的是,通过覆盖超级方法来扩展超级方法的行为。所以考虑到这一点,super需要一个机会来首先实现它自己的事情,否则你的子类可能会做一些已经完成的事情。我已经看到开发者在最后称超级,但这不是一个好的做法,有点超出了超级调用的目的。 – PostCodeism

你实际上覆盖了代码中的'awakeFromNib'方法。 NSView或任何你的superview也实现了awakeFromNib - 在你执行任何代码之前,你应该在你的实现开始时调用super,以确保NSView能够事先正确地设置它自己。

- (void)awakeFromNib 
{ 
    [super awakeFromNib]; 

    ... your code ... 
}