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视图委托,所以两者是相互兼容的。