2012-07-07 46 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> 
相关问题