【问题标题】:Assigning to from incompatible type warning分配给不兼容的类型警告
【发布时间】:2023-03-07 18:20:02
【问题描述】:

分配给 ID 来自下面代码中显示的不兼容类型“CameraVIewController*”警告

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

【问题讨论】:

  • 你实现协议UIImagePickerControllerDelegate了吗?

标签: iphone ios delegates


【解决方案1】:

其实我觉得真正的原因是你错过了协议“UINavigationControllerDelegate

UIImagePickerController.h 你可以看到委托定义:

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

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

picker.delegate = self;

self viewController 必须同时实现 UINavigationControllerDelegateUIImagePickerControllerDelegate

如果你只实现UIImagePickerControllerDelegate,你找不到任何错误文字,但你会得到一个警告“Assigning to id from in compatible type ''CameraVIewController''* ",将 UINavigationControllerDelegate 添加到您的 viewController 的协议声明中即可摆脱它。

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

【讨论】:

  • 贾里德,对我来说还不算太晚。非常感谢!
  • +1 表明了这个问题背后的真正原因,非常感谢。
  • 这很有帮助!我不知道我的班级必须同时符合 UIImagePickerControllerDelegate AND UINavigationControllerDelegate
  • 这是唯一适用于 iOS 的正确答案
【解决方案2】:

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

@interface CameraVIewController : UIViewController <UIImagePickerControllerDelegate>

【讨论】:

    【解决方案3】:

    或者,您可以通过强制转换来修复警告:

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

    但无论如何你必须实现UIImagePickerControllerDelegate

    【讨论】:

    • 没有其他解决方案适用于我的类似错误,除了这个 - 非常简单 - 谢谢!
    【解决方案4】:

    另一种方法是在实现文件的顶部声明私有类别或类扩展。例如:

    @interface CameraVIewController (Private) <UIImagePickerControllerDelegate>
    @end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多