I am saving an NSMutableArray in a Transformable property in my Core Data store. I can create the entity properly with data in the NSMutableArray and then load it out of the property, and even make changes. When I go around my app and re-access it, my changes are saved. However when I reload the app, the changes have not saved in the core data store. Other changes to the entity – e.g. changing its title, which is saved as an NSString – are saved even when I quit and re-open the app.
I read in another StackOverflow question that Transformable attributes are not automatically notified of changes, and that I’d have to call “the appropriate setter before saving”. However even using the actual setter functions – I have also tried calling didChangeValueForKey – the property is not saved properly. Any good ideas?
You must, as you note, “re-set” a transformable property:
There is no way that Core Data could appropriately monitor an arbitrary transformable object so that it could ‘do the right thing’ automatically.
Furthermore, you must be certain that you actually save the managed object context after you modify the transformable attribute:
During a single run of the program, unsaved changes will appear visible because the managed object context keeps modified instances in memory. Without saving the context, however, those changes will not be persisted to disk.