2010-09-22 14 views

Respuesta

34

Usted podría utilizar "ahora" en el modelo, pero la base de datos evalúa que en tiempo de compilación, no tiempo de ejecución. Usted obtendrá la fecha de compilación almacenada en sus valores por defecto modelo, lo que probablemente no es lo que quiere:

http://iphonedevelopment.blogspot.com/2009/07/core-data-default-dates-in-data-model.html

La forma más fiable para garantizar un valor predeterminado de la propiedad de la fecha actual es para anular -awakeFromInsert en una subclase NSManagedObject y asigne la fecha actual allí.

- (void) awakeFromInsert 
{ 
    [super awakeFromInsert]; 
    self.date = [NSDate date]; 
    // or [self setPrimitiveDate:[NSDate date]]; 
    // to avoid triggering KVO notifications 

} 

Nota: Si usted está haciendo uso de contextos de objetos gestionados anidadas (o UIManagedDocument), lo anterior no funcionará como se espera. Este consejo solo se aplica cuando se usan contextos de objetos gestionados únicos.

+2

Esto no es correcto porque se llamará a awakeForInsert cada vez que se creará un NSManagedObject. Se pueden crear diferentes NSManagedObject en diferentes subprocesos mientras representan la misma entidad CoreData. – Kamchatka

+0

La creación de un objeto administrado en dos subprocesos diferentes que representen la misma entidad violaría las leyes de la física de Datos centrales. Y definitivamente será un indicador de algún error de lógica de la aplicación. Hacer algo como esto no es una práctica recomendada. –

+0

Creo que puedes. Aquí hay un caso de uso justo: definitivamente podría tener un objeto Core Data en el hilo principal para mostrarlo (digamos un objeto "Foto") y luego tener un hilo de trabajo en el fondo cargando el mismo objeto de la base de datos, aplicando procesamiento de imagen, guardando la foto en la tienda persistente. En ese punto, se obtiene una notificación de cambio global y el hilo principal puede decidir fusionar los cambios en el contexto del objeto gestionado de hilo principal. – Kamchatka

Cuestiones relacionadas