objective c代表现有的类别方法

时间:2011-04-22 11:08:11

标签: objective-c delegates

我希望我的类委托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

在classe中,我重新实现了我要求的方法,我写道:

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

但我收到了“无法识别的选择器”错误。感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

InternalDelegate的类型为id,因此编译器没有IDEA该对象上有哪些方法。您通常按以下方式声明委托......

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

然后在界面中将实例变量声明为...

id<MyDelegate> internalDelegate;

请记住,虽然使用属性来使用assign属性,因为您没有委托...

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

注意:使委托实现NSObject协议可确保您可以在其上调用respondsToSelector。