linkedin

A veces se pierde demasiado tiempo googleando una pregunta cuando se tiene el poder de responderla uno mismo. El hombre se ha vuelto cada vez más olvidadizo a medida que aprende a recuperar información de la red. Puedes leer sobre ello aquí, pero lo más probable es que no retengas gran cosa. (¿No me crees? ¿Qué tal las tablas de multiplicar? Nombra los planetas. Ve a un sitio nuevo sin tu GPS… ¡Sí, eso pensaba!)

La codificación es una carrera que sufre MUCHO este fenómeno. Si algo es desconocido, buscamos documentación de alguien que lo haya hecho antes. PERO a veces ya tenemos todas las herramientas que necesitamos para hacer algo.

Tengo algunos NSManagedObjects. Contienen datos. Necesito enviarlos con JSON a través de la web.

Parece tan simple que pensé ‘Debe haber un método, ya sea en los documentos de Apple o en mi marco SBJSON’. Por supuesto, no apareció nada en Google, así que pensé: “Soy tan estúpido; ¡probablemente haya un framework de terceros SOLO PARA ESTO! Pero no, no lo hay. Porque es muy sencillo y yo ya sabía cómo hacerlo.

Para empezar, hazte algunas categorías.

  1. Archivo -> Nuevo -> Nuevo Archivo

  2. iOS -> CocoaTouch -> Categoría Objective-C

  3. Categoría: nómbrala algo útil como “JSON_Dicts”

  4. Categoría en: La clase con la que estamos tratando (el NSManagedObject que nos ha hecho el generador de código de CoreData). Observa: Ahora tienes una categoría en tu clase que debería llamarse así: “[nombre de la clase]+JSON_Dicts”.

  5. Declare lo siguiente en el archivo .h de la nueva categoría:

- (NSDictionary *)jsonDictionary;

  1. Implementa esa mierda. Para este ejemplo voy a utilizar un NSManagedObject de un proyecto en el que estoy trabajando que implica la adición de “Animal” entradas en una base de datos:

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

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

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

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

if (self.tamaño) { [dictionary setObject:self.size forKey:@”tamañoint”]; } else { [dictionary setObject:nil forKey:@”tamañoint”]; }

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

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

return diccionario; }`

¡Das it!

  1. Envíalo a tu codificador JSON. Yo uso SBJSON por lo que mi mensaje se parece a esto:

NSString *jsonString = [animal.jsonDictionary JSONRepresenation];

Saldrá con este aspecto (por ejemplo):

jsonRepresentation: {"edad":2, "namestring": "RMA", "género":1, "númerodeanimales":1, "sizeint":2, "status":0, "species": "Cat"}

¿Alguien tiene alguna sugerencia de mejora?

¿Necesita más ayuda?

¿Crees que podría ser el momento de traer ayuda adicional?

Door3.com