linkedin

Manchmal verbringt man viel zu viel Zeit damit, eine Frage zu googeln, obwohl man die Möglichkeit hätte, sie selbst zu beantworten. Der Mensch wird immer vergesslicher, je mehr er lernt, Informationen aus dem Internet abzurufen. Sie können darüber hier lesen, aber wahrscheinlich werden Sie nicht viel behalten. (Du glaubst mir nicht? Wie steht es um Ihr Einmaleins? Nennen Sie die Planeten. Gehen Sie ohne Ihr GPS an einen neuen Ort… Ja, das dachte ich mir!)

Die Codierung ist ein Beruf, der SEHR unter diesem Phänomen leidet. Wenn wir etwas nicht kennen, suchen wir nach einer Dokumentation, in der jemand es zuerst gemacht hat. ABER manchmal haben wir alle Werkzeuge, die wir brauchen, um etwas zu tun, bereits.

Ich habe einige NSManagedObjects. Sie enthalten Daten. Ich muss diese mit JSON über das Web senden.

Es scheint so einfach zu sein, dass ich dachte: “Es muss eine Methode geben, entweder in den Apple-Dokumenten oder in meinem SBJSON-Framework”. Natürlich fand ich bei Google nichts, also dachte ich: “Ich bin so dumm; es gibt wahrscheinlich ein Framework eines Drittanbieters genau für diesen Zweck! Aber, ähm, duh, nein, gibt es nicht. Weil es so einfach ist und ich bereits wusste, wie man es macht.

Um loszulegen, erstellen Sie einige Kategorien.

  1. Datei -> Neu -> Neue Datei

  2. iOS -> CocoaTouch -> Objective-C Kategorie

  3. Kategorie: Benennen Sie sie mit einem sinnvollen Namen wie “JSON_Dicts”

  4. Kategorie auf: Die Klasse, mit der wir es zu tun haben (das NSManagedObject, das uns der CoreData-Codegenerator erstellt hat). Beachten Sie: Sie haben jetzt eine Kategorie für Ihre Klasse, die folgendermaßen benannt werden sollte: “[Klassenname]+JSON_Dicts”.

  5. Deklarieren Sie das Folgende in der .h-Datei der neuen Kategorie:

- (NSDictionary *)jsonDictionary;

  1. Implementieren Sie diesen Mistkerl. Für dieses Beispiel verwende ich ein NSManagedObject aus einem Projekt, an dem ich arbeite und das das Hinzufügen von “Tier”-Einträgen in eine Datenbank beinhaltet:

`- (NSDictionary *)jsonDictionary { NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithCapacity:10]; if (self.age) { [dictionary setObject:self.age forKey:@”age”]; } else { [dictionary setObject:nil forKey:@”age”]; }

if (self.gender) { [dictionary setObject:self.gender forKey:@”gender”]; } else { [dictionary setObject:nil forKey:@”gender”]; }

if (self.namestring) { [dictionary setObject:self.namestring forKey:@”namestring”]; } else { [dictionary setObject:nil forKey:@”namestring”]; }

if (self.numberofanimals) { [dictionary setObject:self.numberofanimals forKey:@”numberofanimals”]; } else { [dictionary setObject:nil forKey:@”numberofanimals”]; }

if (self.size) { [dictionary setObject:self.size forKey:@”sizeint”]; } else { [dictionary setObject:nil forKey:@”sizeint”]; }

if (self.species) { [dictionary setObject:self.species forKey:@”species”]; } else { [dictionary setObject:nil forKey:@”species”]; }

if (self.status) { [dictionary setObject:self.status forKey:@”status”]; } else { [dictionary setObject:nil forKey:@”status”]; }

return dictionary; }`

Das war’s!

  1. Senden Sie das an Ihren JSON-Encoder. Ich verwende SBJSON, so dass meine Nachricht wie folgt aussieht:

NSString *jsonString = [animal.jsonDictionary JSONRepresenation];

Das Ergebnis sieht dann zum Beispiel so aus:

jsonRepresentation: {"age":2, "namestring": "RMA", "gender":1, "numberofanimals":1, "sizeint":2, "status":0, "species": "Cat"}

Hat irgendjemand einen Verbesserungsvorschlag?

Brauchen Sie weitere Hilfe?

Denken Sie, dass es an der Zeit wäre, zusätzliche Hilfe in Anspruch zu nehmen?

Door3.com