Как вызвать метод через объект, созданный интерфейсом в Objective-C - PullRequest
0 голосов
/ 15 февраля 2010

Мне нужно вызвать метод через объект, созданный интерфейсом, т.е.

id<MyProtocol>obj;

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

[obj load]; 

в моем основном классе в applicationDidFinishLaunching, но я не могу получить доступ к методу? Просьба предложить мне правильный способ вызова методов через протоколы ...

Ответы [ 2 ]

2 голосов
/ 15 февраля 2010

Протокол ничего не реализует. Он описывает только набор сообщений, на которые объект должен ответить. Ваш obj объект принадлежит к какому-либо классу. Этот класс должен реализовывать методы, описанные в MyProtocol.

Редактировать

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

В вашем случае obj - это ClassB, поэтому ClassB должен реализовывать методы, описанные MyProtocol, либо напрямую, либо через наследование.

0 голосов
/ 15 февраля 2010

[obj load] в порядке. Если вы хотите закрыть компилятор, вы можете привести его к id:

[(id)obj load];

Но если вы знаете, что вам нужно вызвать метод -load, возможно, вам следует добавить метод -load к протоколу или создать другой протокол с методом -load, например

@protocol Loadable
-(void)load;
@end

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