2009-09-02 13 views
12

Tengo un objeto de entidad País con el nombre del país y el código del país. Es una subclase de NSManagedObject y la estoy usando con el modelo de datos principal para almacenar su valor en una tienda persistente.Subclase NSManagedObject fuera del objeto administrado como un objeto normal

Tengo un lugar donde el mismo objeto Country se utilizará como un objeto normal, es decir, lo usaré para almacenar un nombre de país temporal.

Para que me han inicializado el País de la siguiente manera

[NSManagedObject alloc] init] 

inicialización realiza con éxito, pero no soy capaz de establecer cualquier propiedad a ese objeto. Por lo tanto, hice una exploración. En eso encontré que init para NSManagedObject no es compatible según la documentación.

No sé cómo usar el país NSManagedObject con CoreData, así como un objeto normal.

Respuesta

10

segundo párrafo de la visión general de la documentación de la clase NSManagedObject:

Un objeto gestionado está asociado con una descripción entidad (una instancia de NSEntityDescription) que proporciona metadatos acerca del objeto (incluyendo el nombre de la entidad que representa el objeto y los nombres de sus atributos y relaciones ) y con un contexto de objeto gestionado que rastrea cambios en el gráfico de objetos. Es importante que un objeto gestionado sea configurado correctamente para su uso con Core Data. Si instancia un objeto administrado directamente, debe llamar al inicializador designado (initWithEntity: insertIntoManagedObjectContext :).

De la documentación del método:

Importante: Este método es el inicializador designado para NSManagedObject. No debe inicializar un objeto administrado simplemente por enviándolo init.

La documentación es realmente muy buena.

No desea intentar utilizar un objeto NSManagedObject fuera de una pila CoreData viable. Los NSManagedObjects están diseñados explícitamente para funcionar dentro de un entorno de Datos Core correctamente configurado. Si necesita una instancia temporal, puede crear una tienda en memoria o crear una en su tienda habitual y simplemente no guardar los cambios sin eliminarlos primero.

+0

¡Gracias! Por lo tanto, no es posible inicializar como lo hacemos para un objeto normal. Supongo que se está refiriendo a NSInMemoryStoreType para la tienda persistente, por lo que la entidad insertada se almacenará en la memoria RAM volátil. Tengo otra pregunta: ¿cuándo se borrará o tendremos que purgarla manualmente? – raksja

+0

Se borrará cuando diga que se borre (manualmente) o cuando se cierre la aplicación ... InMemoryStores funciona igual que las otras tiendas, solo que la persistencia es ... solo en memoria. – bbum

2

Uso initWithEntity:insertIntoManagedObjectContext: y pasar nil para contexto de objeto gestionado.

Cuestiones relacionadas