我正在尝试将我的代码转换为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;
}
答案 0 :(得分:35)
带有Xcode 6的新Clang运输通过NS_DESIGNATED_INITIALIZER宏启用编译器强制指定的初始值设定项。当它在类声明中标记任何一个init-family方法时,所有其他初始值设定项都被认为是" secondary" (使用Apple的术语)初始化程序。也就是说,他们应该互相呼叫指定的或辅助初始化程序,直到它们到达指定的初始化程序。
UIView没有标记为指定的初始化程序,所以在某处你已经将该类的另一个init方法声明为指定的初始化程序。因此,NSCoder的初始化程序被标记为次要并生成警告。我已经提交了一个关于它的雷达(rdar:// 17559176),但在此之前,它可以通过指定-Wno-objc-designated-initializers
或通过提供适当的诊断push-pop来基于每个文件关闭。 -Wobjc-designated-initializers
。
答案 1 :(得分:4)