2009-09-28 11 views
8

¿Hay alguna forma de inicializar un objeto gestionado fuera de un contexto? Básicamente intento asignar/iniciar un Objeto Administrado fuera de un contexto primero, luego averiguar si realmente quiero insertar el objeto, y luego inyectarlo en el almacén de datos usando un contexto de objeto administrado existente.iPhone Core Data: inicialización del objeto gestionado sin contexto

¿Es esto posible o va en contra del uso previsto de Core Data?

Respuesta

5

Managed Object se "arregló" por el contexto, por lo tanto, no puede realmente los instanciate con alloc, ya que no están destinados a be.However, crear instancias de un objeto gestionado a través del contexto no persiste hasta que llame a guardar en el método contexto, por lo que tendría el mismo efecto utilizando el contexto para instanciarlo y solo guardarlo después de descubrir que realmente desea usar el objeto.

+0

que figuraba como mucho, sólo quería confirmar que este fue el caso. Gracias Daniel. – WillF

2

No, no puede crear una instancia de NSManagedObject instsance fuera de NSManagedObjectContext (bueno, puede, pero sucederán cosas malas y su programa casi seguro no funcionará como esperaba). Sin embargo, puede crear un NSInMemoryPersistentStore -backed NSManagedObjectContext. Es un poco más de configuración (no mucho) y todo se desvanece cuando tratas con la tienda en memoria. Mientras tanto, obtiene todos los beneficios de la administración de gráficos de objetos de Core Data.

0

Lo que probablemente esté fotografiando son los contextos múltiples. Puede crear un contexto adicional de "scratchpad" y luego fusionar cualquier cambio de nuevo en el contexto principal. Uno de los proyectos de muestra de iPhone de Apple logra esto exactamente. Tendrás que iniciar sesión en el centro de desarrollo para encontrarlo.

1

Para cualquier persona que se topa con esta pregunta, así es como he logrado lo que el PO probablemente iba para:

NSManagedObjectContext *moc = AppDelegate.managedObjectContext; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyModel" 
    inManagedObjectContext:moc]; 
MyModel *model = [[MyModel alloc] initWithEntity:entity 
    insertIntoManagedObjectContext:nil]; 
+1

Sería cauteloso al usar esto si los MOC se crean utilizando cualquier cosa, pero el valor predeterminado NSConfinementConcurrencyType - NSPrivateQueueConcurrencyType o NSMainQueueConcurrencyType puede dar lugar a problemas con las propiedades que se anulan – stevesliva

+0

Además, ¡no se invoca 'awakeFromInsert'! – stevesliva

+0

'' 'awakeFromInsert''' será invocado si luego lo agrega al MOC mediante' '' [moc insertObject: modelo]; '' – etipton

Cuestiones relacionadas