Как избавиться от предупреждения «необъявленный селектор» - PullRequest
160 голосов
/ 03 июня 2011

Я хочу использовать селектор в экземпляре NSObject без необходимости в реализованном протоколе. Например, есть метод категории, который должен установить свойство ошибки, если экземпляр NSObject, к которому он вызывается, поддерживает его. Это код, и код работает как задумано:

if ([self respondsToSelector:@selector(setError:)])
{
    [self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]];
}

Однако компилятор не видит никакого метода с setError: signature, поэтому он выдает предупреждение для каждой строки, содержащей фрагмент @selector(setError:):

Undeclared selector 'setError:'

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

Это выполнимо? Как?

Приветствия
EP

Ответы [ 12 ]

0 голосов
/ 29 ноября 2014

Мне удалось убрать предупреждение, добавив ничтожный метод (раскрытие: я не подумал об этом, но нашел его, прибегнув к поиску по расписанию с временным интервалом)

    [NSTimer scheduledTimerWithTimeInterval:[[NSDate distantFuture] timeIntervalSinceNow]
                                     target:self
                                   selector:@selector(donothingatall:)
                                   userInfo:nil
                                    repeats:YES];


    [[NSRunLoop currentRunLoop] run];

    HTTPLogVerbose(@"%@: BonjourThread: Aborted", THIS_FILE);

    }
}

+ (void) donothingatall:(NSTimer *)timer
{

}

Хотя я ценю знание того, как скрыть предупреждение, лучше исправить его, и ни методы Серхио, ни Релкина не помогли мне по неизвестным причинам.

0 голосов
/ 22 октября 2013

Хотя правильный ответ, вероятно, заключается в информировании XCode посредством импорта или регистрации селектора о том, что такой селектор существует, в моем случае я пропустил точку с запятой. Прежде чем «исправить» ошибку, убедитесь, что, возможно, ошибка правильная, а ваш код - нет. Я обнаружил ошибку в примере Apple MVCNetworking, например.

...