Подтвердить что ты не робот

Отключить заданную проверку инициализатора в Xcode 6

Я получаю ошибку компиляции:

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

Проверенные с помощью компиляции назначенные инициализаторы могут быть хорошей вещью, но если я не хочу иметь дело с этим прямо сейчас, как я могу отключить это?

4b9b3361

Ответ 1

Метод 1

В вашем проекте:

  • Измените настройки сборки для своей цели (⌘-1, выберите проект или cf. Документы Apple).
  • Найдите "Другие предупреждающие флаги". up in here, yo
  • Добавить -Wno-objc-designated-initializers.

Вы также можете сделать некоторую комбинацию этого и -Wobjc-designated-initializers для каждого файла или с помощью диагностических нажатий и всплывающих подсказок (cf. @bandejapaisa "Способ 3" answer ниже).

Метод 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 docs.

Ответ 2

Следуя от ответа Клей..

Способ 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

EDIT: Тем не менее, я только на самом деле использовал это один раз сам. Я нахожу его той же суммой (или немного больше), чтобы сделать это правильно, если это один случай. Поэтому добавьте свой конструктор в NS_DESIGNATED_INITIALIZER. И если он затем жалуется, что метод init не переопределяется, добавьте метод init в свой заголовок с помощью NS_UNAVAILABLE.