描述你的问题
Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)
警告如上
程序运行正常,全部加上__nonnull 就好了,为什么?
贴上相关代码
typedef void (^completionHandlerBlock)(NSURL * _Nullable localfile, NSURLResponse * _Nullable response, NSError * _Nullable error);
//NS_ASSUME_NONNULL_BEGIN
@interface DownLoadImages : NSObject
@property (nonatomic, strong) NSURL *imageURL;
- (instancetype)initWithURL:(NSURL *)contentURL;
- (void)startDownloadingImage:(completionHandlerBlock)completionHandler;
@end
.h文件
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
//NS_ASSUME_NONNULL_BEGIN
//NS_ASSUME_NONNULL_END
使用这个只能消除属性警告
Ini bukan masalah dengan
typedef
, ini kerana kata kunci_Nullable
muncul dalam blok yang anda tetapkan. Jika anda mengalih keluarnya, amaran tidak akan dilaporkan:Terdapat dua penyelesaian:
Alih keluar kata kunci
_Nullable
. Bagaimanapun, lalainya boleh dibatalkan, jadi tidak mengapa jika anda mengalih keluarnya.Tekun dan simpan kata kunci
_Nullable
, kemudian tambahkan_Nonnull
,_Nullable
dan_Null_unspecified
pada setiap atribut dan parameter yang melaporkan amaran.Ambil perhatian bahawa adalah tidak selamat untuk menambah __nonnull pada semua seperti yang anda katakan. Sebaik-baiknya anda memilih sama ada untuk menambah nonnull atau nullable berdasarkan sama ada atribut itu berkemungkinan tidak mempunyai masa untuk melihatnya satu demi satu, Anda juga harus menambah semua
_Null_unspecified
, bukan semua__nonnull
.Ini ialah ciri baharu yang ditambahkan dalam versi xcode6.3 Selagi anda menggunakan atribut ini, ini bermakna semua parameter pembolehubah dan kaedah dalam kelas mesti dipertimbangkan dan atribut ini mesti ditetapkan
.