Ios 从不兼容的类型分配给可为空的ID
我在XCode中出现了这个警告,我似乎无法摆脱它 从不兼容类型“MyViewController*const\u strong”分配给“idIos 从不兼容的类型分配给可为空的ID,ios,objective-c,delegates,uiimagepickercontroller,Ios,Objective C,Delegates,Uiimagepickercontroller,我在XCode中出现了这个警告,我似乎无法摆脱它 从不兼容类型“MyViewController*const\u strong”分配给“id\u Nullable” 在这一行: picker.delegate=self 这行代码使应用程序按预期工作所以移除它,它不起作用。但我不知道如何消除这个错误。有什么帮助吗? 已指定委托的其他方法不会引发此警告 视图控制器是嵌入在NavigationController中的TabBarViewController的一部分 我的类继承了UIImagePicke
picker.delegate=self代码>
这行代码使应用程序按预期工作所以移除它,它不起作用。但我不知道如何消除这个错误。有什么帮助吗?
已指定委托的其他方法不会引发此警告
视图控制器是嵌入在NavigationController中的TabBarViewController的一部分
我的类继承了UIImagePickerControllerDelegate
@interface MyViewController () <UICollectionViewDelegate, UICollectionViewDataSource, UIImagePickerControllerDelegate, UIActionSheetDelegate, UICollectionViewDelegateFlowLayout> {
}
///...
@end
添加UINavigationControllerDelegate
以及UIImagePickerControllerDelegate
会为我隐藏该警告
在UIKit中,图像选择器的委托指定为:
@property(nullable,nonatomic,weak) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;
@property(可空、非原子、弱)id委托;
来自文档:
图像选择器的委托对象
声明
SWIFT
weak var delegate: protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>?
弱var委托:协议?
目标-C
@property(nonatomic, weak) id<UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate
@属性(非原子,弱)id委托
讨论
当用户拾取图像或电影或退出选择器界面时,代理将收到通知。委托还决定何时关闭选择器接口,因此必须提供一个委托才能使用选择器。如果此属性为nil,则如果您尝试显示它,将立即取消选取器。添加UINavigationControllerDelegate
以及UIImagePickerControllerDelegate
会为我隐藏该警告
在UIKit中,图像选择器的委托指定为:
@property(nullable,nonatomic,weak) id <UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate;
@property(可空、非原子、弱)id委托;
来自文档:
图像选择器的委托对象
声明
SWIFT
weak var delegate: protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>?
弱var委托:协议?
目标-C
@property(nonatomic, weak) id<UINavigationControllerDelegate, UIImagePickerControllerDelegate> delegate
@属性(非原子,弱)id委托
讨论
当用户拾取图像或电影或退出选择器界面时,代理将收到通知。委托还决定何时关闭选择器接口,因此必须提供一个委托才能使用选择器。如果此属性为nil,则如果尝试显示该选择器,则会立即将其解除。除了UIImagePickerControllerDelegate
之外,还需要UINavigationControllerDelegate
@interface MyViewController () <UICollectionViewDelegate, UICollectionViewDataSource, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIActionSheetDelegate, UICollectionViewDelegateFlowLayout> {
}
@接口MyViewController(){
}
除了UIImagePickerControllerDelegate
之外,还需要UINavigationControllerDelegate
@interface MyViewController () <UICollectionViewDelegate, UICollectionViewDataSource, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIActionSheetDelegate, UICollectionViewDelegateFlowLayout> {
}
@接口MyViewController(){
}
UINavigationControllerDelegate
会处理警告。但是,UINavigationBarDelegate
没有。是的,你是对的,我错过了打字。它应该隐藏这个警告。请清理您的项目并构建agian以查看更改。@FiremarbleUINavigationControllerDelegate
会处理警告。但是,UINavigationBarDelegate
没有。是的,你是对的,我错过了打字。它应该隐藏这个警告。请清理您的项目并构建agian以查看更改。@FireMarble解决了此问题。您是否碰巧有一个指向某些文档的快速链接,这些文档说明这是一项要求?为什么其他代理会抛出该警告?可以找到UIImagePickerController
的delegate
属性的文档。它被声明为@property(可空、非原子、弱)id委托代码>。这意味着分配给属性的任何内容都必须符合这两个协议。非常感谢。这是我必须记住的一件事。你为什么要记住呢?它是有文档记录的,如果你犯了错误,编译器会告诉你你做错了什么。这就解决了问题。您是否碰巧有一个指向某些文档的快速链接,这些文档说明这是一项要求?为什么其他代理会抛出该警告?可以找到UIImagePickerController
的delegate
属性的文档。它被声明为@property(可空、非原子、弱)id委托代码>。这意味着分配给属性的任何内容都必须符合这两个协议。非常感谢。这是我必须记住的一件事。你为什么要记住呢?它是有文档记录的,如果你犯了错误,编译器会告诉你你做错了什么。