Учитывая (id <MyDelegate>) делегат, можете ли вы сказать, что это за класс делегата? - PullRequest
1 голос
/ 23 февраля 2012

Когда такой делегат передается в MyClass,

- (MyClass *)initWithDelegate:(id <MyDelegate>)delegate {..}

возможно ли как-то сказать, что это за класс мой делегат?Будучи определенным как id, делегат, похоже, не отвечает ни на какие вызовы методов, такие как class, description, responsedsToSelector и т. Д.

Я бы хотел отслеживать, кто вызывает MyClass!

Заранее спасибо!

/ Кристиан

Ответы [ 2 ]

5 голосов
/ 23 февраля 2012

Вы можете позвонить [delegate class];, чтобы получить класс delegate.

Если delegate не отвечает на это, это означает, что это nil.

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

Теперь, когда вы упомянули, что получаете ошибки компилятора, ваш делегат не соответствует протоколу NSObject. Таким образом, компилятор не распознает его как NSObject. Вам следует изменить объявление вашего протокола MyDelegate на следующее:

@protocol MyDelegate <NSObject>

// ...

@end
0 голосов
/ 26 апреля 2014

В случае, если вы не можете изменить сам протокол, вы можете просто написать:

- (MyClass*) initWithDelegate:(id<NSObject, MyDelegate>)delegate {..}

Тогда будет доступно свойство 'class'. Вы можете заменить NSObject (или добавить дополнительные протоколы) для поддержки (и, следовательно, для аргумента) других типов. Например:

- (MyClass*) initWithDelegate:(id<NSObject, NSCoding, MyDelegate>)delegate {..}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...