【发布时间】:2016-06-14 06:36:25
【问题描述】:
我安装了 Xcode 8.0 beta (8S128d)。现在我有一些警告信息:
Method possibly missing a [super awakeFromNib] call
在所有awakeFromNib 方法中。
什么情况下需要调用超类的这个方法?
【问题讨论】:
标签: ios objective-c iphone xcode
我安装了 Xcode 8.0 beta (8S128d)。现在我有一些警告信息:
Method possibly missing a [super awakeFromNib] call
在所有awakeFromNib 方法中。
什么情况下需要调用超类的这个方法?
【问题讨论】:
标签: ios objective-c iphone xcode
根据Apple:
你必须调用 awakeFromNib 的超级实现给 parent 类有机会执行任何额外的初始化,他们 要求。虽然这个方法的默认实现确实 没什么,很多 UIKit 类都提供了非空的实现。你可以 在您自己的任何时候调用超级实现 awakeFromNib 方法。
在 Xcode 8 之前,对此没有严格的编译器要求,但是 Apple 已使用 Xcode8 对此进行了更改,如果 awakeFromNib 中缺少对 [super awakeFromNib](或 swift 中的 super.awakeFromNib())的调用,编译器会将其视为错误。
所以 Swift 版本看起来像这样:
func awakeFromNib() {
super.awakeFromNib()
... your magical code ...
}
【讨论】:
[super awakeFromNib]?
您在代码中有效地覆盖了“awakeFromNib”方法。 NSView 或任何你的 superview 也实现了 awakeFromNib - 你应该在你执行任何代码之前在你的实现开始时调用 super 以确保 NSView 可以事先正确设置自己。
- (void)awakeFromNib
{
[super awakeFromNib];
... your code ...
}
【讨论】: