0

次の構造の ViewController クラスがあります。

ヘッダー ファイル:

@protocol GCStageViewControllerDelegate;

@interface GCStageViewController : UIViewController <UIActionSheetDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate> {
     id <GCStageViewControllerDelegate> delegate;
...
}

@property (nonatomic, retain) id <GCStageViewControllerDelegate> delegate;

...

@end


@protocol GCStageViewControllerDelegate

- (void)gcStageViewContollerDidFinish:(GCStageViewController *)controller withGCStageItem:(GCStageItem *)item;

@end

実装ファイル:

- (void)viewDidLoad {
...
     stageInputTextField.delegate = self; // works
...
}


- (void)takePicture {
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    } else {
        [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    }

    imagePicker.delegate = self; // here I get the error

    [self presentModalViewController:imagePicker animated:YES];
}

takePicture メソッドでデリゲートを設定すると、次の警告が表示されます。

'id<UINavigationControllerDelegate,UIImagePickerControllerDelegate>'互換性のない型 'GCStageViewController *' からの割り当て

何が問題なのですか?

4

2 に答える 2

1

UIImagePickerControllerDelegate は、実際には と の2 つのプロトコルへの適合を必要UIImagePickerControllerDelegateとしUINavigationControllerDelegateます。ヘッダーに準拠するUINavigationControllerDelegateと、エラーが消えます。

@interface GCStageViewController : UIViewController <UIActionSheetDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> 
于 2012-07-07T19:44:32.730 に答える