Transformable attributes in Core Data
Boring: strings and integers; fun and mysterious: transformable!
In addition to the usual types – string, float, boolean, date – you can define core data entities with an attribute of type Transformable. What is this magic type, and what does it transform into?
Add a Transformable property, generate an
and this is what you’ll see:
@property (nonatomic, retain) id myTransformable;
A plain old
id! So in theory, you could set any object there. On 10.9, I
can set my own custom
NSObject subclass object to the transformable property,
but when I save the context I get an exception for the unrecognized
There’s the clue that the object needs to conform to
NSData, and others are supported out of the box.
So you can use your own class as-is — as long as you implement the required
encodeWithCoder:. Then, you and Core
Data can get a room and your data will be happily persisted and realized
with your classes intact.
The standard downside is that transformable attributes are stored in the
SQLite backend as binary plists inside BLOBs, so you can’t query
those fields directly from an