![](/img/trans.png)
[英]Designated initializer should only invoke a designated initializer on 'super' xcode 6.3.1
[英]Turn off designated initializer checking in Xcode 6
我收到了編譯錯誤:
error: convenience initializer missing a 'self' call to another initializer [-Werror,-Wobjc-designated-initializers]
編譯檢查指定的初始化程序可能是一件好事,但如果我現在不想處理它,我該怎么辦呢?
以下是Clay的回答..
您可能希望在一次出現時取消警告,而不是全部取消:
#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方法。
在您的項目中:
-Wno-objc-designated-initializers
。 你也可以在每個文件的基礎上對這個和-Wobjc-designated-initializers
進行一些組合,或者使用clang診斷推送和彈出(參見下面的@ bandejapaisa的“方法3” 答案 )。
此方法允許您在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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.