2017-10-13 1 views
0

Wie NULL-Schlüsselworttypen mit mehrstufigen Zeigertypen in folgenden Deklaration für (NSError **)error assoziieren?Handle _Nonnull oder Nullable mit mehrstufigen Zeigertyp

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

möchte ich Fehler nullable machen und loszuwerden “Pointer is missing a nullability type specifier (__nonnull or __nullable)”

enter image description here

+0

Ähnliche: https://stackoverflow.com/questions/37618830/objec tive-c-nulllability-for-output-parameters – rmaddy

Antwort

1

Wenn Sie explizite NULL-Zulässigkeit hinzufügen möchten, müssen Sie _Nullable zum äußersten (letzten) Zeiger anzuwenden. Aber das ist die Standardeinstellung für indirekte Zeiger, daher sollte es nicht notwendig sein. Ihr aktueller Code ist korrekt und vorzuziehen.

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

Versuchte Fehler: (NSError ** _Nullable) error hat immer noch das gleiche Nullability-Problem. – lal

0

Wenn Sie eine Warnung oder Fehlermeldung erhalten, wenn treat-Warnung-as-Fehler ist auf Projekt, auf Xcode 9. Verwenden Sie dieses Format für die Multi-Level Zeiger:

Lösung:

error:(NSError *_Nullable* _Nullable)error

Andere Fehlervarianten:

a) Mit error:(NSError ** _Nonnull)error Ergebnisse in der Kompilierung Fehler Nullability keyword 'nullable' cannot be applied to multi-level pointer type 'NSError *__autoreleasing *’

b) mit error:(NSError * _Nonnull *)error Ergebnisse in der Kompilierung Fehler Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

c) mit error:(NSError ** _Nullable)error Ergebnisse in der Kompilierung Fehler Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)

öffnen Radar für NSError ** ohne NULL-Zulässigkeit Typ als zeigt Warnung, die nicht unterdrückt werden kann http://www.openradar.me/21766176

+0

Ah; Sie fügen 'NS_ASSUME_NONNULL_BEGIN' und' NS_ASSUME_NONNULL_END' nicht um Ihr Interface hinzu. In der Regel wird das vor dem individuellen Markieren jedes Parameters bevorzugt. Damit erhalten Sie das erwartete 'NSError **' - Verhalten, ohne es markieren zu müssen. ("annimme nonnull" nimmt für indirekte Anweisungen eigentlich null an, weil das fast immer korrekt ist.) –

Verwandte Themen