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

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

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

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


person Clay Bridges    schedule 21.08.2014    source источник


Ответы (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

РЕДАКТИРОВАТЬ: Тем не менее, я сам использовал это только один раз. Я нахожу столько же (или немного больше) усилий, чтобы сделать это правильно, если это единичный случай. Поэтому отметьте свой конструктор с помощью NS_DESIGNATED_INITIALIZER. И если затем он жалуется на то, что метод инициализации не переопределен, добавьте метод инициализации в свой заголовок с помощью NS_UNAVAILABLE.

person bandejapaisa    schedule 26.11.2014
comment
Это здорово @bandejapaisa, у вас случайно нет списка, где хранятся сообщения об ошибках и соответствующие им строки, как указано выше. Есть ли где-нибудь справочная таблица? - person Logan; 24.10.2015
comment
Хороший вопрос. Выполнил быстрый поиск и не нашел ни одного списка на сайте clang или в документации. Однако нашел это: nshipster.com/clang-diagnostics, на который есть ссылка внизу статью на сайт со списком - хотя он не содержит этой конкретной ошибки, поэтому он не может быть окончательным списком. - person bandejapaisa; 26.10.2015

Способ 1

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

  1. Отредактируйте параметры сборки для вашей цели (⌘-1, выберите проект или см. Документы Apple).
  2. Найдите «Другие предупреждающие флаги». иди сюда, йоу
  3. Добавьте -Wno-objc-designated-initializers.

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

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

person Clay Bridges    schedule 21.08.2014
comment
Будет ли эта конфигурация сборки xcode нарушать соответствие требованиям Apple или вызывать отклонение приложения? Просто любопытство. - person V V; 31.07.2015
comment
@ Виджай, я очень сомневаюсь в этом. Конечно, не то, что я знаю. - person Clay Bridges; 03.08.2015
comment
Буквально самая раздражающая вещь, когда-либо возвращавшаяся к коду Obj-C из Swift. - person TheCodingArt; 12.05.2016