Должен ли я установить протокол для объектов массива Objective C, чтобы избежать предупреждения компилятора? - PullRequest
0 голосов
/ 05 июля 2010

У меня есть класс, назовем его ABC, со свойством NSArray * objects, и объекты в NSArray могут быть одним из двух разных классов, X и Y. И X, и Y имеют путь свойство, но компилятор этого не знает.

Поэтому, даже если ABC всегда найдет свойство path в моих объектах массива, я получаю предупреждения компилятора о своем коде -Метод 'path' не найден ".Приложение работает нормально, но меня раздражают предупреждения.Как я могу исправить свой код (с протоколами?), Чтобы компилятор перестал жаловаться?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 05 июля 2010

Происходят ли X и Y из одного и того же суперкласса, который содержит "путь"? Если «путь» концептуально является одним и тем же значением, а X и Y связаны этим значением, то это должно быть либо в суперклассе, либо в протоколе.

Кроме того, вы можете использовать протокол NSKeyValueCoding для прямого доступа к значениям через строку через - (id)valueForKey:(NSString *)key. Однако при использовании этого метода вы теряете безопасность любого типа.

2 голосов
/ 05 июля 2010

Вам необходимо импортировать заголовок, который объявляет метод path. Когда он компилирует ваш код, компилятор просматривает список методов, о которых знает этот файл, и видит, что метода path нет. Вам просто нужно сказать ему, что метод существует, и его сигнатура такова, что компилятор будет удовлетворен. Протокол не требуется.

1 голос
/ 05 июля 2010
valueForKey:@"path"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...