2017-10-13 68 views
0

如何在以下聲明中將空性關鍵字與多級指針類型關聯起來(NSError **)error使用多級指針類型處理_Nonnull或Nullable

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

我要讓誤差可空,擺脫「Pointer is missing a nullability type specifier (__nonnull or __nullable)」

enter image description here

+0

相關:https://stackoverflow.com/questions/37618830/objec tive-c-nullability-for-output-parameters – rmaddy

回答

1

如果你想添加明確是否爲空,則需要應用_Nullable到最外面的(最後一個)的指針。但是這是間接指針的默認值,所以不需要。你目前的代碼是正確的,更可取。

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

試過'錯誤:(NSError ** _Nullable)error'仍然有相同的Nullability問題。 – lal

0

如果你得到一個警告或錯誤,如果治療預警,如錯誤是在項目上的Xcode 9.使用這種格式的多級指針:

解決方法:

error:(NSError *_Nullable* _Nullable)error

其他錯誤的變化:

a)在編譯時錯誤 結果Nullability keyword 'nullable' cannot be applied to multi-level pointer type 'NSError *__autoreleasing *’

b)用error:(NSError * _Nonnull *)error 在編譯時間錯誤error:(NSError ** _Nullable)error 結果結果在編譯時錯誤 Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

c)中Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

爲NSError **打開雷達沒有一個非空型示出作爲不能被壓制的警告 http://www.openradar.me/21766176

+0

啊;你不是在你的界面上添加'NS_ASSUME_NONNULL_BEGIN'和'NS_ASSUME_NONNULL_END'。通常情況下,優先於單獨標記每個參數。有了它,你將得到預期的'NSError **'行爲,而不必標記它。 (「假設nonnull」實際上對於indirects爲null,因爲這幾乎總是正確的。) –