 <p>Correct. You must transform your attribute into an <code>NSData</code> object. You would need to serialize an <code>NSURL</code> to <code>NSData</code> -- and the default <code>NSKeyedUnarchiveFromDataTransformerName</code> transformer will do this for you.</p> <p>Another approach, and the one that I use for URLs, is to maintain two parallel properties. One transient property of undefined type for the URL, and a second persistent property of string type for the backing store. I lazily construct the URL from the string the first time it's requested, and I update the string property whenever the URL is changed.</p> <p>There's no way to enforce it, but you really don't want to use the string property from outside your entity's class. I generally make the <code>@property</code> definition for the string attribute private to remind myself not to use it.</p>