Делегировать после создания подкласса? - PullRequest
0 голосов
/ 05 декабря 2011

Извините, я не смог сформулировать короткий вопрос для заголовка.

В случае, если я создаю подкласс для класса с протоколом делегата и свойством, делает ли мой делегатвсе еще нужно реализовать протокол делегата суперкласса, или мне нужно определить новый для подкласса?

В моем случае я вложил в подкласс UIImagePickerController:

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

Когда я пытаюсь установить его делегат на self, из какого-то контроллера представления я получаю следующее предупреждение:

предупреждение: семантическая проблема: отправка 'ViewController *' параметру несовместимого типа 'id'

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Ваш делегат должен соответствовать объявлению свойства UIImagePickerController:

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

Итак, попробуйте добавить <UIImagePickerControllerDelegate> в интерфейс подкласса:

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

И, вероятно, вам потребуется UINavigationControllerDelegate и реализовать обязательные методы, если таковые имеются.

0 голосов
/ 05 декабря 2011

Да, ваш делегат также должен быть совместим с суперклассом. Например:

@protocol MyWebViewDelegate<UIWebViewDelegate>
{
     @optional
     -(void) myOptionalMethod1;
     -(void) myOptionalMethod2;

     @required
     -(void) myRequiredMethod1;
     -(void) myRequiredMethod2;
}

Этот протокол расширяет делегат веб-представления, поэтому они совместимы друг с другом.

...