在Xcode 6中关闭指定的初始化程序检查

时间:2014-08-21 15:00:54

标签: objective-c xcode suppress-warnings designated-initializer

我收到了编译错误:

error: convenience initializer missing a 'self' call to another initializer [-Werror,-Wobjc-designated-initializers]

编译检查指定的初始化程序可能是一件好事,但如果我现在不想要处理它,我该怎么办呢?

2 个答案:

答案 0 :(得分:34)

来自Clay的回答......

方法3

您可能希望在一次出现时抑制警告,而不是所有警告:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
- (instancetype) initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (self) {
        // do whatever I was doing....
    }
    return self;
}
#pragma clang diagnostic pop

编辑: 但是,我实际上只使用过一次。如果它是一个案例,我发现它只是为了正确地做到这一点(或者更多一点)努力。因此,使用NS_DESIGNATED_INITIALIZER标记构造函数。如果它然后抱怨init方法没有被覆盖,则使用NS_UNAVAILABLE向头部添加init方法。

答案 1 :(得分:18)

方法1

在您的项目中:

  1. 修改目标的构建设置(⌘-1,选择项目或cf. Apple docs)。
  2. 搜索"其他警告标志"。 up in here, yo
  3. 添加-Wno-objc-designated-initializers
  4. 您还可以基于每个文件或使用clang诊断推送和弹出来对此和-Wobjc-designated-initializers进行组合(参见@ bandejapaisa' s"方法3" {{3下面)。

    方法2

    此方法允许您在Xcode 5和X之间来回切换。 6,还提供了一个提醒,以修复指定的初始化程序。

    对于iOS开发,请将其放在.pch(预编译的标头)文件中:

    #ifdef __IPHONE_8_0
        // suppress these errors until we are ready to handle them
        #pragma message "Ignoring designated initializer warnings"
        #pragma clang diagnostic ignored "-Wobjc-designated-initializers"
    #else
        // temporarily define an empty NS_DESIGNATED_INITIALIZER so we can use now,
        // will be ready for iOS8 SDK
        #define NS_DESIGNATED_INITIALIZER
    #endif
    

    OS X 10.10的answer__IPHONE_8_0__MAC_10_10

    为什么?

    如果您对这些邮件存在的原因感兴趣,可以查看analog 或这些this SO answer