簡體   English   中英

在Xcode 6中關閉指定的初始化程序檢查

[英]Turn off designated initializer checking in Xcode 6

我收到了編譯錯誤:

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

編譯檢查指定的初始化程序可能是一件好事,但如果我現在不想處理它,我該怎么辦呢?

以下是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

在您的項目中:

  1. 編輯目標的構建設置(⌘-1,選擇項目或cf. Apple文檔 )。
  2. 搜索“其他警告標志”。 在這里,喲
  3. 添加-Wno-objc-designated-initializers

你也可以在每個文件的基礎上對這個和-Wobjc-designated-initializers進行一些組合,或者使用clang診斷推送和彈出(參見下面的@ bandejapaisa的“方法3” 答案 )。

方法2

此方法允許您在Xcode 5和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

模擬__IPHONE_8_0為OS X 10.10是__MAC_10_10

為什么?

如果您對存在這些消息的原因感興趣,可以查看此SO答案或這些Apple文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM