【问题标题】:iPhone - UIImagePickerControllerDelegate inheritanceiPhone - UIImagePickerControllerDelegate 继承
【发布时间】:2011-06-11 07:17:52
【问题描述】:

我已将UIImagePickerController 添加到UIViewController。我还将UIImagePickerControllerDelegate 分配给了UIViewController

当我执行以下行时,

myPicker.delegate = self;

Xcode 给我以下信息:

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

然后我将UINavigationControllerDelegate 协议添加到相同的UIViewController 并且错误消息消失了。

那么,当我添加UIImagePickerController 时,我是否必须将这两个协议都添加到UIViewController

如果UIImagePickerController 是文档中所述的UINavigationController 的子类,这不应该是自动的吗?为什么我必须添加其父级的委托协议而不仅仅是UIImagePickerControllerDelegate 协议?

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

【问题讨论】:

    标签: iphone inheritance uinavigationcontroller delegates uiimagepickercontroller


    【解决方案1】:

    如您所述,UIImagePickerController 继承自 UINavigationController。它虽然使用相同的delegate 属性,但没有声明自己的(假设的)“imagePickerDelegate”,因此您的委托必须符合这两种协议。这是有道理的,因为您还将相同的委托分配给 UINavigationController 部分(对图像选择器一无所知)。

    我认为这里的 API 设计有点可疑,但无论如何,UINavigationControllerDelegate 中的所有方法都是可选的,因此声明您符合协议并完成它就足够了。

    【讨论】:

    • 这是不合逻辑的,违反了常识,而且文档一如既往地含糊不清——但我怀疑问题是这样的。无论如何,谢谢!
    【解决方案2】:

    像下面这样添加这些代码,你可以看到警告消失了。

    @interface viewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { }
    @end
    

    必须在您的界面中添加UIImagePickerControllerUINavigationController 的协议,这样可以使警告不可见。

    【讨论】:

    • 谢谢它帮了我很多忙并快速解决了问题
    猜你喜欢
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2012-10-30
    • 2017-12-27
    • 2012-12-22
    相关资源
    最近更新 更多