コードをiOS8プロジェクトに変換しようとしていますが、この警告を修正する方法について説明が必要です:"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
_。