2010-06-16 20 views
7

Estoy guardando un NSMutableArray en una propiedad Transformable en mi almacén de datos centrales. Puedo crear la entidad correctamente con los datos en el NSMutableArray y luego cargarla de la propiedad, e incluso realizar cambios. Cuando reviso mi aplicación y la vuelvo a acceder, se guardan mis cambios. Sin embargo, cuando recargo la aplicación, los cambios no se han guardado en el almacén de datos central. Otros cambios en la entidad, p. cambiar su título, que se guarda como NSString - se guardan incluso cuando salgo y vuelvo a abrir la aplicación.Datos principales que no guardan los cambios en la propiedad transformable

Leí en another StackOverflow question que los atributos Transformables no se notifican automáticamente de los cambios, y que tendría que llamar "al instalador apropiado antes de guardar". Sin embargo, incluso utilizando las funciones reales del colocador - también he intentado llamar al didChangeValueForKey - la propiedad no se guarda correctamente. ¿Alguna buena idea?

Respuesta

6

Usted debe, en la nota, "volverá a establecer" una propiedad transformable:

id temp = [myManagedObject myTransformableAttribute]; 

//.. do something with temp 

[myManagedObject setMyTransformableAttribute:temp]; 

No hay manera de que datos básicos podría supervisar adecuadamente un objeto transformable arbitraria para que pudiera 'hacer lo correcto 'automáticamente.

Además, usted debe estar seguro de que en realidad se ahorra el contexto objeto administrado después de modificar el atributo transformable:

NSError *error; 
if(![[myManagedObject managedObjectContext] save:&error]) { 
    //present error 
} 

Durante una sola ejecución del programa, los cambios no guardados aparecerán visibles porque el contexto objeto administrado mantiene instancias modificadas en la memoria. Sin guardar el contexto, sin embargo, esos cambios no se conservarán en el disco.

+5

que he experimentado este problema con NSMutableArrays como el atributo transformable, y yo era el acceso a los métodos setter adecuados y guardar el contexto correctamente (otros atributos se estaban guardados como prueba) En mi caso, la solución fue cambiar el tipo a un NSArray. – JoBu1324

+0

@ JoBu1324 ¡Gracias por esto, me llevó para siempre darme cuenta de por qué las cosas no se guardaban correctamente! – BluGeni

+0

@BluGeni ¡Es un placer! – JoBu1324

0

He notado que no solo necesita volver a configurar la propiedad. Pero también necesitas otra instancia. Es por eso que no estaba funcionando con NSMutableArray

Transformable *copy = [managedObject.transformableProperty copy]; 

// do stuff 

managedObject.transformableProperty = copy; 
Cuestiones relacionadas