从不兼容的类型警告中分配

时间:2012-01-20 05:23:17

标签: iphone ios delegates

分配给       ID  从不兼容的类型''CameraVIewController *''警告显示在下面的代码

 UIImagePickerController * picker = [[UIImagePickerController alloc] init];
 picker.delegate = self;

4 个答案:

答案 0 :(得分:17)

实际上,我认为真正的原因是你错过了协议“ UINavigationControllerDelegate

UIImagePickerController.h 中,您可以看到委托定义:

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

所以,如果你想像这样分配委托:

picker.delegate = self;

self viewController必须同时实现 UINavigationControllerDelegate UIImagePickerControllerDelegate

如果你只实现 UIImagePickerControllerDelegate ,你找不到任何错误文字,但是你会收到一条警告“从不兼容类型分配给id''CameraVIewController ''* “,将 UINavigationControllerDelegate 添加到你的viewController的协议声明中就可以摆脱它。

这是一个非常晚的答案,但我刚刚遇到并解决了它,希望它有所帮助。

答案 1 :(得分:10)

你可能没有声明你的类符合UIImagePickerController。

@interface CameraVIewController : UIViewController <UIImagePickerControllerDelegate>

答案 2 :(得分:7)

或者,您可以使用强制转换修复警告:

picker.delegate = (id <UIImagePickerControllerDelegate>) self;

但你必须实施UIImagePickerControllerDelegate

答案 3 :(得分:0)

另一种方法是在实现文件之上声明私有类或类扩展。例如:

@interface CameraVIewController (Private) <UIImagePickerControllerDelegate>
@end