Цель c Делегировать на существующие методы категории - PullRequest
1 голос
/ 22 апреля 2011

Я хочу, чтобы мой класс делегировал те же методы категории NSObject (NSURLConnectionDelegate).Но я всегда получаю «нераспознанный селектор» при попытке делегировать.Вот простой код, который я использую для тестирования.Где я ошибся?

@interface DelegateTest : NSObject
{
id intenalDelegate;
}

-(void) setDelegate: (id) delegate;
-(void) executeDelegateMethod;

@end


@implementation DelegateTest

-(void) setDelegate:(id) delegate{

intenalDelegate = [delegate retain];
}
-(void) executeDelegateMethod{
if([intenalDelegate      respondsToSelector:@selector(connection:canAuthenticateAgainstProtectionSpace:)]) {
    return  [intenalDelegate connection:nil canAuthenticateAgainstProtectionSpace:nil];}

}
@end

В классе я повторно реализовал запрашиваемый мной метод, я написал:

DelegateTest * test = [[DelegateTest alloc]init];
[test setDelegate:self];
[test executeDelegateMethod];

, но я получил ошибку "нераспознанный селектор".Спасибо всем за советы.

1 Ответ

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

InternalDelegate имеет тип id, поэтому у компилятора нет ИДЕИ, какие методы у этого объекта. Обычно вы объявляете делегатов следующим образом ...

@protocol MyDelegate<NSObject> {
    - (void)myMethod;
}

Затем в интерфейсе вы объявляете переменную экземпляра как ...

id<MyDelegate> internalDelegate;

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

@property (nonatomic, assign) id<MyDelegate> internalDelegate;

Примечание: благодаря тому, что делегат реализует протокол NSObject, вы можете вызывать responsedsToSelector для него.

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