“便捷初始化程序缺less一个”自我“调用另一个初始化程序”

我试图将我的代码转换为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_INITIALIZERmacros使编译器执行指定的初始化器。 当它在一个类的声明中标记了任何一个init-family方法时,所有其他的初始化方法都被认为是“secondary”(使用Apple的术语)初始化方法。 也就是说,他们应该通过指定的或次要的初始化程序,直到它们到达指定的初始化程序。

UIView没有标记为指定的初始值设定项,所以在某个地方声明了另一个类的init方法作为指定的初始值设定项。 正因为如此,NSCoder的初始化器被标记为二级,并产生一个警告。 我已经提交了关于它的雷达(rdar:// 17559176),但在此之前,可以通过指定-Wno-objc-designated-initializers或通过提供适当的诊断push-pop与-Wobjc-designated-initializers

只是@CodaFi所说的附录:

  • 在指定的初始值设定项中find的一片苹果文档就在这里 。
  • 我已经回答了一个关于如何在这里禁止这些警告的问题 ,有更多的select。 我特别喜欢预编译的头文件方法(#2),因为它提醒你修复它。