2012-07-07 96 views
0

我有以下結構的視圖控制器類:視圖控制器不接受我的委託

頭文件

@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方法我得到以下警告:

從不兼容的類型'GCStageViewController *'分配到'id<UINavigationControllerDelegate,UIImagePickerControllerDelegate>'

任何想法有什麼不對?

回答

1

顯然UIImagePicker需要你也實現UINavigationControllerDelegate協議。見the documentation,它清楚地表明代表應符合兩者。 :-)

幸運的是,所有在該協議的方法是可選的,因此,所有你需要做的是假裝:

// change this 
@interface GCStageViewController : UIViewController <UIActionSheetDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate> { 
// to this 
@interface GCStageViewController : UIViewController <UIActionSheetDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> { 
1

的UIImagePickerControllerDelegate實際上需要的構象協議:UIImagePickerControllerDelegateUINavigationControllerDelegate。符合標題中的UINavigationControllerDelegate,錯誤將消失。

@interface GCStageViewController : UIViewController <UIActionSheetDelegate, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> 
相關問題