Предупреждение при вызове метода с идентификатором типа после оператора RespondsToSelector if - PullRequest
1 голос
/ 02 августа 2011

Я вполне уверен, что это простая проблема, но я не смог ее решить.

Я использую метод respondsToSelector в операторе if, чтобы проверить, реализует ли делегатметод.Внутри оператора if я вызываю этот селектор.Ничего сложного.Но я получаю предупреждение о том, что метод не найден ( Снимок экрана ).Однако если я включу заголовочный файл для класса, который реализует метод, предупреждение исчезнет.

Я подозреваю, что это может быть связано с порядком компиляции исходников, возможно?

Любая помощьвысоко ценится.

Ответы [ 3 ]

1 голос
/ 02 августа 2011

Хотя вы можете создавать произвольные селекторы, используя @selector(somethingHere:), вы не можете вызывать произвольные методы для переменной id без предупреждения компилятора.Компилятор все равно проверит, что вызываемый вами метод / селектор был определен где-то для класса или категории.

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

edit:

OK Теперь я вижу, что вы реализуете делегат.В этом случае вам нужно объявить протокол с соответствующими методами и использовать тип id<ProtocolName> для вашего делегата.Тогда ваш класс должен быть объявлен как реализующий этот протокол.

0 голосов
/ 02 августа 2011

Убедитесь, что вы объявили метод в протоколе.

0 голосов
/ 02 августа 2011

Если вы хотите скрыть реальный класс за id типом данных, тогда напишите someProtocol и определите _delegate в ivars и укажите, что он реализует этот протокол.

id<someProtocol> _delegate;
...