"方便初始化程序错过了对另一个初始化程序的'自我'调用"

ign*_*rum 19 ios xcode6 ios8

我正在尝试将我的代码转换为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;
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*aFi 35

带有Xcode 6的新Clang运输通过NS_DESIGNATED_INITIALIZER宏启用编译器强制指定的初始化程序.当它在类声明中标记任何一个init-family方法时,所有其他初始值设定项都被视为"次要"(使用Apple的术语)初始值设定项.也就是说,他们应该互相呼叫指定的或辅助初始化程序,直到它们到达指定的初始化程序.

UIView没有标记为指定的初始化程序,所以在某处您已经将该类的另一个init方法声明为指定的初始化程序.因此,NSCoder的初始化程序将标记为辅助并生成警告.我已经提交了一个关于它的雷达(rdar:// 17559176),但在此之前,它可以通过指定-Wno-objc-designated-initializers或通过提供适当的诊断push-pop 来基于每个文件关闭-Wobjc-designated-initializers.

  • 截至至少iOS SDK 9.2,UIView的-initWithFrame:和-initWithCoder:都标记为NS_DESIGNATED_INITIALIZER. (2认同)