iPhone - UIImagePickerControllerDelegate继承

Spa*_*Dog 28 iphone inheritance delegates uiimagepickercontroller uinavigationcontroller

我添加了UIImagePickerController一个UIViewController.我也指定了UIImagePickerControllerDelegate那个UIViewController.

当我执行以下行时,

myPicker.delegate = self;
Run Code Online (Sandbox Code Playgroud)

Xcode通过以下消息告诉我:

警告:从不兼容的类型'RootViewController'分配id

然后我将UINavigationControllerDelegate协议添加到同一个UIViewController并且错误消息消失了.

所以,我必须双方协议添加到UIViewController时候我加入UIImagePickerController

如果它UIImagePickerControllerUINavigationController文档中所述的子类,那么这不应该是自动的吗?为什么我必须添加其父代理协议而不仅仅是UIImagePickerControllerDelegate协议?

这是一个错误还是我错过了什么?

omz*_*omz 61

如你所述,UIImagePickerController继承自UINavigationController.它使用相同的delegate属性,并且不声明它自己的(假设的)"imagePickerDelegate",因此您的委托必须符合这两个协议.这是有道理的,因为你也在为部件分配相同的委托UINavigationController(对图像选择器一无所知).

在我看来,API设计有点值得怀疑,但无论如何,所有方法UINavigationControllerDelegate都是可选的,因此只需声明您符合协议并完成它即可.


小智 33

像下面这样添加这些代码,您可以看到警告消失.

@interface viewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { }
@end
Run Code Online (Sandbox Code Playgroud)

必须在界面中添加"协议" UIImagePickerController和"协议" UINavigationController,这样可以使警告不可见.