Как избавиться от предупреждений при использовании Category в XCode - PullRequest
0 голосов
/ 28 мая 2011

в моем коде я создал категорию поверх UIViewController, так что каждый из моих UIViewControllers имеет метод обработки ошибок. К сожалению, теперь, когда я вызываю этот метод из категории, я получаю следующее предупреждение в XCode:

 'MainWindowViewController' may not respond to '- (...method name...):'

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

Спасибо за вашу помощь!

Ответы [ 5 ]

8 голосов
/ 28 мая 2011

Импорт заголовка, в котором ваша категория объявлена, в файл реализации, где используются методы из этой категории, должен устранить это предупреждение.

0 голосов
/ 04 июня 2013

Когда все остальное разумное не может решить проблему, повторно введите вызывающий вызов вызов на новой строке чуть ниже вызывающей линии.

Вы можете обнаружить, что компилятор доволен новой строкой.Удалить старую строку.(Что заставляет вас становиться HMMM?)

Я обнаружил, что это происходит не раз с xcode (и другими редакторами).Когда ничего не помогает, введите строку еще раз.

0 голосов
/ 22 апреля 2012

Попробуйте перезапустить XCode и очистить.У меня была та же самая проблема, определенно включал заголовочный файл, но все еще получил предупреждение.Перезапустите и почините его.

0 голосов
/ 28 мая 2011

Владимир, конечно, прав.Добавление категории в класс делает эти функции доступными для всех экземпляров этого класса, независимо от того, является ли заголовочный файл #import ed или нет.Objective-C - это динамический язык.

Однако - компилятор предупреждает вас, что он не может видеть объявление этих сообщений во время компиляции.Код все еще может быть действительным;именно поэтому оно вызывает предупреждение, а не ошибку.

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

Если вы предпочитаете не импортировать категорию в каждый класс, который ее использует, но вы хотели бы иметь чистые компиляции - #import заголовок категории в файл pch.

0 голосов
/ 28 мая 2011

@ Владимир правильно, вам нужно импортировать файл заголовка в ваш класс реализации.

Может быть еще одна причина для предупреждения, которое вы получаете во время компиляции вашего кода,

, если метод не объявлен в заголовочном файле, а реализован в файле реализации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...