2009-12-24 8 views
18

¿Cuál es la mejor manera de agregar métodos personalizados a mis clases generadas por datos centrales?Agregar métodos personalizados a las clases de datos centrales

Por ejemplo, supongamos que tengo una entidad "Persona" con propiedades "nombre" y "apellido". Deseo agregar un método de "nombre completo", que devuelve una concatenación de las propiedades firstname y lastname.

Podría agregar el método a los archivos .h y .m generados, pero esto sería difícil de mantener durante el desarrollo cuando mis entidades aún puedan cambiar. Volver a crear el archivo .h y .m sobrescribiría estos cambios. Otra idea es subclasificar la clase generada y agregar los métodos allí.

¿Hay una manera mejor?

Respuesta

0

Crea su propia subclase de NSManagedObject para las entidades.

mejor explicados en el NSManagedObject documentation

+0

Estoy usando un archivo .xcdatamodel, que genera las clases de objetos administrados para mí. Mi pregunta es sobre la personalización adicional de esta clase generada (que ya es una subclase de NSManagedObject) con métodos personalizados, como el ejemplo en mi publicación original. Gracias! – chris

+0

Mire su modelador de datos. en la parte superior izquierda se enumeran las entidades. También enumera la clase en la que se basa, que de forma predeterminada es NSManagedObject. Puede cambiar eso al nombre de su propia subclase NSManagedObjectS. – Abizern

+0

Debo estar malentendiendo algo. Si creo una subclase NSManagedObject y la uso como base para las clases generadas, entonces tengo esta jerarquía: NSManagedObject :: Person :: PersonMO. La clase PersonMO contiene mis atributos, y la clase Person contiene mis métodos. Sin embargo, los atributos de PersonMO no son visibles para los métodos Persona. – chris

38

Me parece que la mejor manera de añadir métodos personalizados que no están directamente vinculados a las propiedades de datos es utilizar una categoría. En general, esto funciona mejor si crea sus entidades de Datos centrales como sus propias subclases de NSManagedObject en el modelador de datos, pero también puede funcionar sin eso. De esta forma, todo el código generado por la máquina puede permanecer en los archivos .h y .m principales, y todo su código personalizado se coloca en .h y .m para su categoría en esa clase.

+12

+1. Al usar categorías, puede volar y reconstruir el encabezado y la implementación de la entidad generada por Xcode a medida que cambia el modelo, a la vez que mantiene sus propios métodos personalizados intactos y seguros. –

1

Recomiendo agregar estos métodos a su subclase NSManagedObject personalizada. Si le preocupa mantener accesos a medida que cambia su modelo de datos, mientras conserva sus métodos personalizados, le sugiero que busque "Wolf" Rentzsch's mogenerator. Mucha gente jura por esta herramienta solo para este propósito.

+3

mogenerator solo agrega la complejidad del proyecto y te aleja de la pila actual de CoreData. Las categorías son una forma realmente elegante de hacerlo, siempre y cuando no dependas de un conjunto de variables de instancia, etc. –

+2

Además de la complejidad que mencionó @BenLachman, tampoco es un gran diseño. Los métodos de las subclases 'NSManagedObject' deben relacionarse directamente con la persistencia de su modelo hacia y desde CoreData. No deberían estar formateando datos para la capa de presentación. – memmons

Cuestiones relacionadas