我希望我的类委托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];
但我收到了“无法识别的选择器”错误。感谢任何帮助。
答案 0 :(得分:0)
InternalDelegate的类型为id,因此编译器没有IDEA该对象上有哪些方法。您通常按以下方式声明委托......
@protocol MyDelegate<NSObject> {
- (void)myMethod;
}
然后在界面中将实例变量声明为...
id<MyDelegate> internalDelegate;
请记住,虽然使用属性来使用assign属性,因为您没有委托...
@property (nonatomic, assign) id<MyDelegate> internalDelegate;
注意:使委托实现NSObject协议可确保您可以在其上调用respondsToSelector。