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方法。

所以這個問題不是「如果你想實現兩者都會發生什麼......」。你必須實現兩者。