子类,协议和代理 - 不调用

时间:2013-12-05 23:01:45

标签: objective-c delegates protocols

我有2个班级:

@protocol MainProtocol
-(void) method1;
@end

@interface ClassA : NSObject
@property id <MainProtocol> delegate;
@end

@protocol SubProtocol <MainProtocol>
-(void) method2
@end

@interface ClassB : ClassA
@end

@implementation ClassB

-(void) foo {
    [self.delegate method1]; // works fine
    [self.delegate method2]; // error
}

@end

我不确定为何我无法使用method2致电self.delegate。是因为在父类中声明了delegate吗?如果是,请如何在delegate中对ClassB进行本地化?

1 个答案:

答案 0 :(得分:1)

-[ClassB foo]内,self.delegate被声明为类型id<MainProtocol> - 也就是说,它符合MainProtocol,但不一定符合SubProtocol。因此,ClassB实例不确定delegate是否响应-method2。如果您要将delegate发送给它,可以在ClassB中将id<SubProtocol>重新声明为-method2类型的对象。