According to the docs:
You should not override init. You are discouraged from overriding initWithEntity:insertIntoManagedObjectContext:
and you should instead use awakeFromInsert or awakeFromFetch.
This is fine if all I want to do is set some attribute to the current date or similar, but what if I want to send in another object and set attributes based on its information?
For example, in an NSManagedObject subclass called ‘Item’, I want an initFromOtherThing:(Thing *)thing, in which the item’s name is set to that of the thing. I would like to avoid ‘just having to remember’ to set the name each time immediately after creating the item, and having to update fifteen different controller classes when I decide that I want Item to also set another default attribute based on Thing. These are actions tied to the model.
How am I meant to handle this?
I think the best way to handle this is by subclassing the NSManagedObject and then creating a category to hold what you want to add to the object. For example a couple of class methods for uniquing and conveniently creating:
Now don’t ever call
initWithEntity:insertIntoManagedObjectContext:directly just use your convenience class method like: