iphone - tipos - ¿Cómo establezco valores predeterminados en nuevas propiedades para entidades existentes después de una migración de datos básicos de peso liviano?
tipos de migracion informatica (2)
He completado con éxito la migración ligera en mi modelo de datos básicos.
Mi entidad personalizada Vehicle recibió una nueva propiedad ''tirePressure'' que es una propiedad opcional de tipo double con el valor predeterminado 0.00.
Cuando se recogen vehículos ''viejos'' de la tienda (vehículos que se crearon antes de que se realizara la migración), el valor de su propiedad ''tirePressure'' es nulo. (¿Es ese comportamiento esperado?)
Entonces pensé: "No hay problema, solo haré esto en la clase de Vehículo:"
- (void)awakeFromFetch {
[super awakeFromFetch];
if (nil == self.tirePressure) {
[self willChangeValueForKey:@"tirePressure"];
self.tirePressure = [NSNumber numberWithDouble:0.0];
[self didChangeValueForKey:@"tirePressure"];
}
}
Dado que "el procesamiento de cambios está explícitamente deshabilitado alrededor de" awakeFromFetch , pensé que las llamadas a willChangeValueForKey y didChangeValueForKey marcarían ''tirePresure'' como sucio.
Pero ellos no.
Cada vez que se recogen estos vehículos de la tienda, ''tirePressure'' sigue siendo nulo a pesar de haber guardado el contexto.
Finalmente lo descubrí después de 6 meses.
Los atributos que se agregan a una entidad de datos central deben marcarse como no opcionales. Solo entonces los valores predeterminados se establecerán automáticamente durante la migración liviana para las entidades que se crearon con el modelo de datos anterior.
Necesita usar setPrimativeValueForKey
en awakeFromFetch
porque el acceso dinámico utilizado por self.propertyName
aún no está activo.
Sin embargo, dado que el valor predeterminado no aparece en primer lugar, eso sugiere que su migración falló en detalle. Es posible que deba crear un mapa de migración para garantizar que la migración sea completamente exitosa.