我正在尝试将我的代码转换为 iOS 8 项目,我需要一些关于如何修复此警告的解释:"Convenience initializer missing a 'self' call to another initializer"
关于这段代码:
-(instancetype) initWithCoder:(NSCoder *)aDecoder // warning: Convenience initializer missing a 'self ' call to another initializer
{
if (self = [super initWithCoder:aDecoder]) // warning: convenience initializer should not invoke an initializer on 'super'
{
// some init stuff here
}
return self;
}
最佳答案
Xcode 6 附带的新 Clang 通过 NS_DESIGNATED_INITIALIZER 宏启用编译器强制指定的初始化程序。当它在类的声明中标记任何一个 init-family 方法时,所有其他初始化程序都被视为“次要”(使用 Apple 的术语)初始化程序。也就是说,它们应该调用另一个指定的或次要的初始化程序,直到他们到达指定的初始化程序。
UIView 没有将任何内容标记为指定的初始值设定项,因此您在某个地方声明了该类的另一个 init 方法作为指定的初始值设定项。因此,NSCoder 的初始化程序被标记为次要的并生成警告。我已经提交了一个关于它的雷达 (rdar://17559176),但在那之前可以通过指定 -Wno-objc-designated-initializers
或通过使用 -Wobjc-designated-initializers
提供适当的诊断 push-pop。
关于ios - "Convenience initializer missing a ' self ' call to another initializer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24458608/