Pregunta

Me gusta la capacidad de serialización simple para pequeñas colecciones de objetos: es simple, el almacenamiento es XML, etc. Pero los valores de configuración en los diccionarios son engorrosos:

[myDict setObject:keepThis forKey:@"ivar"];

Prefiero utilizar objetos derivados de clases (o incluso estructuras):

myObj.ivar = keepThis

... y luego envía un mensaje a una colección para obtener una lista. Las clases / estructuras utilizadas para este propósito podrían restringirse de modo que se mapeen directa y fácilmente a primitivas de plist; por ejemplo, myObj podría asignarse a un NSDictionary y podría establecerse un requisito en ivars de modo que sean una de las primitivas plist.

¿Alguien ya ha construido una instalación para esto, o debería rodar la mía?

¿Fue útil?

Solución 5

Vi esto publicado en otro lugar, pero es exactamente lo que estaba buscando. Las respuestas anteriores apuntan a los ingredientes crudos, pero aquí está, todo resumido: http: // retacount.com/blog/?p=7

Otros consejos

No estoy seguro de que esto sea de lo que estás hablando, pero Codificación de valor clave , entre muchas otras cosas, le permitirá obtenga un diccionario con valores de los datos de una instancia , y también establecer datos de instancia de un diccionario .

También hay una manera de solicite a una instancia una lista de sus atributos , aunque resulta que debe escribir un código usted mismo para que funcione. (Sin embargo, podría utilizar el introspección en tiempo de ejecución para implementar eso, si lo desea.) EDIT 2 de enero de 2011: - [NSObject attributeKeys] ya no aparece en la documentación de iOS. He editado el enlace para que apunte a la documentación de Mac, pero tenga en cuenta que esto solo puede ser una opción en esa plataforma.

(El El protocolo NSCoding es otra forma de dejar que sus objetos se almacenen / restauren, pero el almacenamiento es binario, no XML, y usted todavía es responsable de obtener / poner cada valor que le interese cuando se le solicite por el sistema para hacerlo.)

Es posible que desee consultar esta pregunta SO que trata de poner los ivars de una instancia en un diccionario en tiempo de ejecución.

Un proyecto interesante. La Guía de programación Objective-C 2.0 tiene una sección sobre las funciones de tiempo de ejecución para obtener dinámicamente una lista de las propiedades de una clase:

objc_property_t *class_copyPropertyList(Class cls, unsigned int *outCount)

Con esto, debería ser bastante fácil escribir una categoría en NSObject con un método que obtenga la lista de propiedades y las ponga en un diccionario.

Para usar propiedades para esto, necesitaría tener un conjunto predefinido de claves posibles. No puede usar nombres arbitrarios con la sintaxis de punto & # 8212; tenía que ser una propiedad conocida o accesora del primer operando. Entonces no puede haber una forma genérica de esto. Pero si crea uno propio, convertirlo en un diccionario es tan simple como hacer [self dictionaryWithValuesForKeys: listOfProperties] .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top