2013-07-26 10 views
7

Mam kilka obiektów, które wysyłam do serwera jako JSON, w treści żądania, dla żądania POST. Moje pytanie dotyczy właściwości boolowskich.Obiekt RESTKit Właściwość BOOL na true/false JSON

Say mam ta właściwość w obiekcie Wysyłam jako JSON:

@property (nonatomic) BOOL exported;

Domyślnie RestKit wysyła logiczną albo jako 1 lub 0 w JSON. Jak ustawić RestKit tak, aby wszystkie BOOL-y były wysyłane jako true lub false (co jest typem boolean JSON).

Zabawne, idąc w drugą stronę, z JSON true lub false do właściwości BOOL, RestKit czyta JSON true/false dobrze, odpowiednio ustawiając właściwość.

Odpowiedz

1

Problem ten wynika z faktu, że SQLite nie ma logiczną typ danych. Więc jeśli mam Boolean w moim schemacie Core Data, to nadal jest on zapisywany jako liczba całkowita w SQLite (z wartością int równą 1 lub 0). Właśnie dlatego widzę 1 lub 0 podczas wyprowadzania JSON przez RestKit.

Aby rozwiązać ten problem, zmieniłem moją własność z mojego pierwotnego pytania z BOOL do NSNumber:

@property (nonatomic) NSNumber *exported;

Ilekroć przypisać do tej własności muszę ustawić go z NSNumber wartości logicznej.

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

JSON generowany jest poprawna, ponieważ jestem ustawiania NSNumber z boolValue:

"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" 

Źródło: See This table

+1

To dobrze, ale chciałbym map od nieruchomości NSObject BOOL do formatu JSON logiczną, która jest po prostu '' TRUE lub FALSE - od JSON ma typ boolowski. – dbarros

2

Alternatywnie; możesz uczynić go boolem zamiast BOOLem, a restkit poprawnie go przeanalizuje.

@property (nonatomic) bool exported;

Powodem obsługuje ją prawidłowo odczytu jest bool są z natury tylko 1 lub 0 ... tak Restkit jest wystarczająco inteligentny, aby przekształcić go w BOOL.

+0

Warto wspomnieć, że nie wydaje się to już problemem w przypadku 64-bitowych wersji. – ender44

0

Jeśli ktoś używa RestKit z Swift i ma z tym problemy, tak jak ja, nie zapomnij dodać do modyfikatora dynamic, a zmienna Bool nie może być opcjonalna. Dlatego też użyć następujących:

dynamic var exported: Bool = false 

Sprawdź pytanie: Bool Property Cannot be marked dynamic in swift