Validierung jeder Eigenschaft vor dem Zurückgeben des Objekts

8

Wenn Sie Mantle verwenden, besteht die Möglichkeit, das zu erstellende Objekt (in diesem Fall über JSON) vor dem Zurückgeben zu überprüfen dass X- und Y-Eigenschaften nicht null sind?

Stellen Sie sich diese Klasse vor:

%Vor%

Ich möchte einen Weg finden, zu verifizieren, dass, wenn der JSON, den ich erhalten habe, nicht die name hat (aus irgendeinem Grund gab es ein Problem in der DB des Servers), werde ich eine nil Person zurückgeben, wie sie es nicht macht Sinn, das Objekt ohne diese Eigenschaft zu erstellen.

    
Peres 25.04.2014, 11:04
quelle

5 Antworten

1

Sie können die MTLJSONSerializing -Protokollmethode classForParsingJSONDictionary: verwenden gebe nil statt ein ungültiges Objekt zurück:

%Vor%     
David Snabel-Caunt 25.04.2014, 14:17
quelle
3

Während Sie den Initialisierer überschreiben konnten. Es scheint prägnanter, das validate: zu überschreiben, da dies in der letzten Phase aufgerufen wird, bevor Mantle das deserialisierte Objekt zurückgibt. Es ist sinnvoll, all Ihre Validierungslogik in eine validate -Methode zu legen ...

Siehe die letzte Zeile von MTLJSONAdapter

%Vor%

Dies sagt uns, dass, wenn unser benutzerdefiniertes Modell NO von validate zurückgibt, Mantle das Objekt verwerfen wird.

Sie könnten also in Ihrer Unterklasse einfach folgendes ausführen:

%Vor%

Im Idealfall möchten Sie wahrscheinlich in Ihrer eigenen Implementierung einen entsprechenden Fehler zurückgeben.

Die Validierungsmethode ruft dann für jede Eigenschaft, die Sie mit Mantel in validateValue:forKey:error: registriert haben, Foundation JSONKeyPathsByPropertyKey auf. Wenn Sie also ein kontrollierteres Validierungs-Setup wünschen, können Sie Ihre Daten auch hier validieren.

    
Daniel Galasko 17.06.2015 14:55
quelle
0

Tatsächlich benutze ich Mantle nicht, aber zur Validierung verwende ich eine andere GitHub-Bibliothek namens RPJSONValidator

Er sagt Ihnen, welcher Typ erwartet wird und welcher Typ der Wert ist.

Ein einfacher Beispielcode

%Vor%

Jedes Schlüssel / Wert-Paar beschreibt Anforderungen für jeden JSON-Wert. Zum Beispiel wird das Schlüssel / Wert-Paar @"name" : RPValidatorPredicate.isString eine Anforderung an den JSON-Wert mit dem Schlüssel "name" als NSString setzen. Wir können auch Anforderungen verketten. Zum Beispiel wird @"age" : RPValidatorPredicate.isNumber.isOptional eine Anforderung auf den Wert von "age" setzen, um ein NSNumber zu sein, aber nur wenn es in JSON existiert.

    
EridB 25.04.2014 11:19
quelle
0
___ qstnhdr ___ Validierung jeder Eigenschaft vor dem Zurückgeben des Objekts ___ qstntxt ___

Wenn Sie Mantle verwenden, besteht die Möglichkeit, das zu erstellende Objekt (in diesem Fall über JSON) vor dem Zurückgeben zu überprüfen dass X- und Y-Eigenschaften nicht null sind?

Stellen Sie sich diese Klasse vor:

%Vor%

Ich möchte einen Weg finden, zu verifizieren, dass, wenn der JSON, den ich erhalten habe, nicht die %code% hat (aus irgendeinem Grund gab es ein Problem in der DB des Servers), werde ich eine %code% Person zurückgeben, wie sie es nicht macht Sinn, das Objekt ohne diese Eigenschaft zu erstellen.

    
___ answer23291563 ___

Tatsächlich benutze ich Mantle nicht, aber zur Validierung verwende ich eine andere GitHub-Bibliothek namens RPJSONValidator

Er sagt Ihnen, welcher Typ erwartet wird und welcher Typ der Wert ist.

Ein einfacher Beispielcode

%Vor%

Jedes Schlüssel / Wert-Paar beschreibt Anforderungen für jeden JSON-Wert. Zum Beispiel wird das Schlüssel / Wert-Paar %code% : %code% eine Anforderung an den JSON-Wert mit dem Schlüssel "name" als %code% setzen. Wir können auch Anforderungen verketten. Zum Beispiel wird %code% : %code% eine Anforderung auf den Wert von "age" setzen, um ein %code% zu sein, aber nur wenn es in JSON existiert.

    
___ answer30895224 ___

Während Sie den Initialisierer überschreiben konnten. Es scheint prägnanter, das %code% zu überschreiben, da dies in der letzten Phase aufgerufen wird, bevor %code% das deserialisierte Objekt zurückgibt. Es ist sinnvoll, all Ihre Validierungslogik in eine %code% -Methode zu legen ...

Siehe die letzte Zeile von %code%

%Vor%

Dies sagt uns, dass, wenn unser benutzerdefiniertes Modell %code% von %code% zurückgibt, Mantle das Objekt verwerfen wird.

Sie könnten also in Ihrer Unterklasse einfach folgendes ausführen:

%Vor%

Im Idealfall möchten Sie wahrscheinlich in Ihrer eigenen Implementierung einen entsprechenden Fehler zurückgeben.

Die Validierungsmethode ruft dann für jede Eigenschaft, die Sie mit Mantel in %code% registriert haben, Foundation %code% auf. Wenn Sie also ein kontrollierteres Validierungs-Setup wünschen, können Sie Ihre Daten auch hier validieren.

    
___ tag123ios ___ iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die verwandten Tags [objective-c] und [swift] für Probleme, die für diese Programmiersprachen spezifisch sind. ___ answer23295701 ___

Sie können die %code% -Protokollmethode %code% verwenden gebe nil statt ein ungültiges Objekt zurück:

%Vor%     
___ antwort23294231 ___

Ich benutze eine sehr alte Version von Mantle. YMMV

Sie können den [MTLModel modelWithExternalRepresentation] Selektor überschreiben. Rufen Sie [super modelWithExternalRepresentation] auf und fügen Sie dann Ihren eigenen Code hinzu, um nach validierten Daten zu suchen.

    
___ tag123objectivec ___ Dieses Tag sollte nur bei Fragen verwendet werden, die sich auf Objective-C-Funktionen beziehen oder von Code in der Sprache abhängen. Die Tags [Kakao] und [Kakao-Touch] sollten verwendet werden, um nach Frameworks oder Klassen von Apple zu fragen. Verwenden Sie die verwandten Tags [ios], [macos], [apple-watch] und [tvos] für Probleme, die für diese Plattformen spezifisch sind. ___ answer23295688 ___

Ich folgte einem kleinen Problem , das auf Mantle geöffnet wurde:

%Vor%

Also am Ende nur überschreiben:

%Vor%     
___ tag123githubmantle ___ Modell-Framework für Cocoa und Cocoa Touch von GitHub ___
John 25.04.2014 13:13
quelle
0

Ich folgte einem kleinen Problem , das auf Mantle geöffnet wurde:

%Vor%

Also am Ende nur überschreiben:

%Vor%     
Peres 25.04.2014 14:16
quelle

Tags und Links