使用多级指针类型处理_Nonnull或Nullable

时间:2017-10-13 18:33:00

标签: objective-c objective-c-nullability

如何在(NSError **)error的以下声明中将可空性关键字与多级指针类型相关联?

- (void)loadSessionForUserId:(nonnull NSString *)userId error:(NSError **)error { ... }

我想让错误可以为空并摆脱“Pointer is missing a nullability type specifier (__nonnull or __nullable)”

enter image description here

2 个答案:

答案 0 :(得分:1)

如果要添加显式可为空性,则需要将_Nullable应用于最外层(最后)指针。但这是间接指针的默认值,所以它不应该是必要的。您当前的代码是正确的,也是首选。

- (void)loadSessionForUserId:(nonnull NSString *)userId error:(NSError ** _Nullable)error;

答案 1 :(得分:0)

如果您收到警告,或者在Xcode 9上为项目启用了treat-warning-as-error,则会出现错误。使用此格式表示多级指针:

解决方案:

Merged Array ( [0] => Array ( [Date] => 2017-10-12 [Amount] => 130.00 [Ref] => 60 [Description] => Water Bill Oct [Id] => 60 [Name] => Water Authority ) [1] => Array ( [Date] => 2017-10-10 [Amount] => 130.00 [Ref] => 63 [Description] => Gas [Id] => 63 [Name] => Service Station ) and so on...

其他错误变体:

a)error:(NSError *_Nullable* _Nullable)error 导致编译时错误 error:(NSError ** _Nonnull)error

b)Nullability keyword 'nullable' cannot be applied to multi-level pointer type 'NSError *__autoreleasing *’ 导致编译时错误 error:(NSError * _Nonnull *)error

c)Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) 编译时错误error:(NSError ** _Nullable)error

的结果

打开Radar for NSError **没有可空性类型显示为无法抑制的警告 http://www.openradar.me/21766176