对不起,我无法为标题制定一个简短的问题..
如果我使用委托协议和属性对类进行子类化,我的委托是否仍然需要实现超类的委托协议,还是我必须为子类定义一个新的委托协议?
在我的情况下,我将UIImagePickerController
[(UIImagePickerController *)self.myUIImagePickerControllerSubclassInstance setDelegate:self];
当我尝试将其委托设置为self
时,从某个视图控制器中我收到以下警告:
警告:语义问题:将'ViewController *'发送到参数 不兼容的类型 'ID'
答案 0 :(得分:1)
您的代表需要遵守UIImagePickerController
财产声明:
@property (nonatomic, assign) id<UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate
因此,尝试将<UIImagePickerControllerDelegate>
添加到子类接口:
@interface YourPicker : UIImagePickerController <UIImagePickerControllerDelegate>
...
@end
可能你需要UINavigationControllerDelegate
并实施强制方法,如果有的话。
答案 1 :(得分:0)
是的,您的代理人还必须与超类兼容。例如:
@protocol MyWebViewDelegate<UIWebViewDelegate>
{
@optional
-(void) myOptionalMethod1;
-(void) myOptionalMethod2;
@required
-(void) myRequiredMethod1;
-(void) myRequiredMethod2;
}
此协议扩展了Web视图委托,因此两者相互兼容。