0

那里有两种可能的代表,我得到一个警告,当我设置委托的UIImagePickerController。这是因为UIImagePickerController及其父级UINavigationController都具有可以使用的委托。代码工作正常,但只是想知道如何妥善处理代理和继承,并失去了警告。设置委托在子类时在父类

所以基本上我已经建立了我自己的MyImagePickerController这是子类的UIImagePickerController。 UIImagePickerController是UINavigationController的子类。 所以继承树是

UINavigationController > UIImagePickerController > MyImagePickerController 

MyImagePickerController也是的UIImagePickerController委托。 所以我添加到我的@interface。

@interface MyImagePickerController : UIImagePickerController <UIImagePickerControllerDelegate>... 

然后我设置MyImagePickerController是授人以自身的loadView

- (void) loadView 
{ 
... 
self.delegate = self; 
... 

} 我实现UIImagePickerControllerDelegate委托方法,它所有的作品。

但我得到一个警告

warning: class 'MyImagePickerController' does not implement the 'UINavigationControllerDelegate' protocol 

的问题是,无论是父类中有自己的代表

UINavigationController   > UIImagePickerController   > MyImagePickerController 
UINavigationControllerDelegate > UIImagePickerControllerDelegate > MyImagePickerController 

而且在定义的UIImagePickerController委托方法可以或者UINavigationControllerDelegate或UIImagePickerControllerDelegate

@interface UIImagePickerController : UINavigationController <NSCoding> { 
@property(nonatomic,assign) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate; 

应用的工作原理,在MyImagePickerController的UIImagePickerControllerDelegate方法被调用,但没有设置委托所以有人阅读代码知道我们正在努力实现UIImagePickerControllerDelegate方法和新手清除警告有道。

如果要在UIImagePickerControllerDelegate中实现UIImagePickerControllerDelegate和UINavigationControllerDelegate方法,会发生什么情况?你如何设置Obj-C中的单个委托? 干杯

回答

1

阅读警告。它会告诉你你需要知道的一切。

警告:类 'MyImagePickerController' 不 实施 'UINavigationControllerDelegate' 协议

这一行:

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

不代表委托对象(注意委托对象,而不是委托方法)可以是UINavigationControllerDelegat Ë UIImagePickerControllerDelegate。这意味着代理对象必须是 UINavigationControllerDelegate UIImagePickerControllerDelegate(它必须符合这两个协议)。

您似乎对子类化和继承有些困惑。问题不在于两个父类都有自己的代表。 UINavigationController的具有代表性质UINavigationControllerDelegate因为的UIImagePickerController 的UINavigationController它也有这个代表,仍然是UINavigationControllerDelegate,但它也加入额外的行为,子类倾向于做,并委托必须现在不仅实现UINavigationControllerDelegate方法而且还有 UIImagePickerControllerDelegate方法。

所以这个问题不是“如果你想实现两者都会发生什么......”。你必须实现两者。