2013-07-26 2 views
7

Ich habe einige Objekte, die ich an einen Server senden, als JSON, in der Anfrage, für eine POST-Anfrage. Meine Frage bezieht sich auf boolesche Eigenschaften.RESTKit Objekt BOOL-Eigenschaft auf wahr/falsch JSON

Sagen, ich habe diese Eigenschaft in einem Objekt, das ich als JSON bin das Senden:

@property (nonatomic) BOOL exported;

standardmäßig RestKit die boolean entweder als 1 oder 0 in JSON sendet. Wie kann ich RestKit so einrichten, dass alle BOOLs als true oder false gesendet werden (was der boolesche JSON-Typ ist).

Witzigerweise, wenn die andere Richtung, von JSON true oder false zum BOOL Eigenschaft liest RestKit die JSON true/false ganz gut, in geeigneter Weise die Eigenschaft festlegen.

Antwort

1

Dieses Problem ergibt sich aus der Tatsache, dass SQLite keinen boolean-Datentyp. Wenn ich also einen Booleschen Wert in meinem Core Data-Schema habe, wird er immer noch als Integer in SQLite gespeichert (mit einem int-Wert von 1 oder 0). Deshalb sehe ich entweder 1 oder 0 bei der Ausgabe von JSON über RestKit.

Um dies zu korrigieren, änderte ich mein Eigentum von meiner ursprünglichen Frage BOOL-NSNumber:

@property (nonatomic) NSNumber *exported;

Jedes Mal, wenn ich auf diese Eigenschaft zuweisen muss ich es mit einem NSNumber boolean Wert einzustellen.

target.exported = [NSNumber numberWithBool:[self.exported boolValue]]; 

Die JSON erzeugt, ist nun korrekt, weil ich die NSNumber mit boolValue bin Einstellung:

"exported" : true 
1
Source type :NSCFBoolean 
Destination type : NSString 
Discussion: Boolean literals true and false parsed from JSON are mapped to NSString properties as @"true" and @"false" 

Quelle: See This table

+1

ist das in Ordnung, aber ich würde gerne von der NSObject BOOL Eigenschaft JSON boolean Format abzubilden, das gerade ist 'true' oder' false' - seit JSON hat einen booleschen Typ. – dbarros

2

Alternativ; Sie könnten es zu einem Bool anstatt zu einem BOOL machen und Restkit wird es richtig analysieren.

@property (nonatomic) bool exported;

Der Grund ist es es richtig in einem Lese behandelt ist, dass Bool ist von Natur aus nur 1 oder 0 ... so Restkit intelligent genug sind, um es zu einem BOOL zu konvertieren.

+0

Erwähnenswert, dass dies bei 64-Bit-Builds kein Problem mehr zu sein scheint. – ender44

0

Wenn jemand RestKit mit Swift verwendet und Probleme damit hat, vergessen Sie nicht, den Modifikator dynamic der Eigenschaft hinzuzufügen, und die Variable Bool kann nicht optional sein. Verwenden Sie deshalb folgende:

dynamic var exported: Bool = false 

prüfen Frage: Bool Property Cannot be marked dynamic in swift

Verwandte Themen