Динамическая переадресация: подавление предупреждения о неполной реализации

У меня есть класс, демонстрирующий некоторые методы, реализация которых обеспечивается внутренним объектом.

Я использую forward invocation для отправки во время выполнения вызова метода для внутреннего объекта, но XCode жалуется, поскольку не может найти реализацию объявленных методов.

Я нашел некоторые другие подобные вопросы по SO, но все они были решены с изменением дизайна.

Я не собираюсь обсуждать дизайн здесь, но если у кого-то есть какое-то предложение об этом, у меня есть открытый вопрос по обзору кода, который более подходящий для такого рода обсуждений.

Мой вопрос заключается в том, существует ли метод отключения предупреждения Incomplete Implementation в XCode.

Ответы

Ответ 1

Вы можете подавить предупреждения Incomplete Implementation, добавив

  #pragma clang diagnostic ignored "-Wincomplete-implementation"

чуть выше @implementation

Надеюсь, что это поможет

EDIT

После того, как в комментариях сказано, что это не сработало для кого-то, и выяснение причины было связано с тем, что это было другое предупреждение, которое они получали, я немного поиграл и смог решить проблему там, поэтому я подумал, что я бы обновил этот ответ, включив их, а для GCC тоже игнорирует. Поэтому для вопроса @Tony следует работать

  #pragma clang diagnostic ignored "-Wprotocol"

Для тех, кто хочет знать версию компилятора GCC, он

  #pragma GCC diagnostic ignored "-Wprotocol"

  #pragma GCC diagnostic ignored "-Wincomplete-implementation"

Я также сделаю вывод, что все эти diagnotstic ignores можно также сделать, указав параметр на основе каждого файла, перейдя в XCODE Project >> Target >> Build Phases >> Compile Sources и добавив флаг компилятора, чтобы вы просто добавили -Wprotocol или Wincomplete-implementation или любой необходимый вам флаг компилятора.

Надеюсь, что это обновление поможет всем, если мне больше потребуется обновить мой ответ, чтобы включить.

РЕДАКТИРОВАТЬ 2

Я уже немного разбирался в этом, наткнулся на Руководство пользователя Clang Compliler, поэтому я подумал, что это будет интересно и полезно любому, кто имеет проблемы вокруг этой области.

Я также нашел другой способ использования этих #pragma diagnostic ignores, и вы можете push и pop их, чтобы, если вы хотите просто игнорировать определенный раздел файла, а не все, то вы может сделать следующее

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wmultichar"

    // And pop the warning is gone.
    char b = 'fa';

    #pragma clang diagnostic pop

Помните, что все эти #pragma компиляции игнорируются также можно использовать с GCC, так что выше было бы

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wmultichar"

    // And pop the warning is gone.
    char b = 'fa';

    #pragma GCC diagnostic pop

push и pop, похоже, работают со всеми diagnostic ignores, которые я пробовал до сих пор.

Другой -

    #pragma clang diagnostic ignored "UnresolvedMessage"
    #pragma GCC diagnostic ignored "UnresolvedMessage"

Для подавления неиспользуемых переменных

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma clang diagnostic pop

и версия GCC

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma GCC diagnostic pop

Еще несколько за игнорирование предупреждений из unavailableInDeploymentTarget

    #pragma clang diagnostic push
    #pragma ide diagnostic ignored "UnavailableInDeploymentTarget"
        leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor;
    #pragma clang diagnostic pop

и выполните утечку фильтра

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [target performSelector:cancelAction withObject:origin];
    #pragma clang diagnostic pop

и устаревшие объявления

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
        button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStyleBordered target:self action:@selector(customButtonPressed:)];
    #pragma clang diagnostic pop

Благодаря DanSkeel вы можете найти здесь весь список

Ответ 2

Вы можете объявить методы в интерфейсе класса классов:

@interface MyClass (ForwardedMethods)

- (void)doSomething;

@end

(без реализации для категории). Тогда Xcode больше не будет жаловаться на "неполную реализацию".