2011-10-19 12 views
9

Tengo una clase que amplía NSObject. Está compuesto por algunas variables flotantes. Quiero almacenar esta clase en datos básicos.Cómo almacenar clases personalizadas usando CoreData

En el modelo de datos, parece que la opción más probable es convertir esta clase en datos binarios para almacenarlos utilizando CoreData.

¿Es esto correcto? Si es así, ¿alguien puede dirigirme a cómo puedo almacenar y recuperar mi clase usando CoreData?

Gracias,

Respuesta

0

que sugeriría la creación de una nueva entidad en los datos básicos, el modelado de los campos en la nueva entidad, y refactoring el código para utilizar la nueva subclase personalizada de objeto gestionado.

10

Una forma de hacer que su objeto personalizado se guarde y cargue de forma transparente desde Core Data es usar un NSValueTransformer. Si crea un NSValueTransformer que puede ir de su clase a NSData y viceversa, puede marcar el atributo en su entidad que corresponde a esta clase como transformable. Core Data le permitirá configurar y recuperar objetos de este tipo cuando se trate de este atributo.

En mi respuesta here Muestro el código de cómo hacerlo con los atributos de UIImage, que no son compatibles de forma nativa con Core Data. Para hacer algo como esto para su objeto personalizado, deberá cumplir con NSCoding e implementar sus propios métodos -encodeWithCoder: y -initWithCoder: para serializarlo en una instancia de NSData para su almacenamiento.

Apple tiene más documentación sobre esto en la sección "Non-Standard Persistent Attributes" de la Guía de programación de datos básicos, incluido un ejemplo que utiliza la clase NSColor de la Mac.

+0

Aunque creo que es mejor hacer lo que @beryllium sugirió; Brad tiene razón (por supuesto). –

0

Mi primera sugerencia es crear una entidad que almacene estos valores, ya que los tipos de objetos que está utilizando son compatibles con los Datos principales.

Si va a cambiar este modelo a menudo/no desea tratar con la migración de datos, siempre puede establecer que la propiedad del objeto sea transformable como su tipo en el modelo de datos principal. Luego, asegúrese de que su clase implemente el protocolo NSCoding, una vez que lo haga, debería funcionar bien.

Cuestiones relacionadas