inheritance后的代表?

对不起,我无法为标题提出一个简短的问题。

如果我使用委托协议和属性inheritance一个类,我的委托仍然需要实现超类的委托协议,还是我必须定义一个新的子类?

在我的情况下,我subclassed UIImagePickerController

 [(UIImagePickerController *)self.myUIImagePickerControllerSubclassInstance setDelegate:self]; 

当我尝试将其代理设置为self ,从某个视图控制器中,我收到以下警告:

警告:语义问题:将“ViewController *”发送给不兼容types“id”的参数

您的委托需要符合UIImagePickerController属性声明:

@property (nonatomic, assign) id<UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate

所以,尝试添加<UIImagePickerControllerDelegate>到你的子类接口:

 @interface YourPicker : UIImagePickerController <UIImagePickerControllerDelegate> ... @end 

也许你会需要UINavigationControllerDelegate和实现强制方法,如果有的话。

是的,您的委托也必须与超类兼容。 例如:

 @protocol MyWebViewDelegate<UIWebViewDelegate> { @optional -(void) myOptionalMethod1; -(void) myOptionalMethod2; @required -(void) myRequiredMethod1; -(void) myRequiredMethod2; } 

这个协议扩展了Web视图委托,所以两者是相互兼容的。