views:

330

answers:

1

I've recently started down the road of programming in Objective-C, and I'm now looking into Core Data. However, I am confused about exactly what defines the model itself in Core Data.

Here's what I mean: Say I create an entity with some set of attributes using the graphical model builder. I then have Xcode generate code for the corresponding class. Next, I want to create a property in the class that will be used only during run-time and does not need to be stored or retrieved by Core Data. So, I add a variable and a corresponding property to the class (synthesizing it in the implementation)

The new property is not defined in the model builder, but it is defined in the class derived from NSManagedObject. How is it treated in Core Data? Do the properties listed in the class define attributes in the "model" or do only the attributes defined in the model builder define the model?

Similarly, I wanted to add a enum-based property to the class file that, when get or set, accesses or changes an NSNumber attribute in the model. Can I do that without Core Data treating the property as an attribute to be stored and retrieved?

THANKS!

+3  A: 

You can add custom properties (and variables) to the code generated for your NSManagedObjects, as you would any other class. These won't become part of the model, but instead will be temporary in memory. It's worth noting that if the managed object were to be dealloc'ed the value in memory would too.

A tip I would suggest if you are just implementing custom accessors to the underlying data is to create a category on the managed object in question. In the accessors, you access the underlying NSNumber and convert it into your enum, defined in the header for the category.

If you need to regenerate the code for the managed object, because say the model changes, you can just delete the class generated for the managed object and regenerate it without needing to merge with any custom code you've added. The category you've added will work all the same as long as the underlying storage property has stayed the same.

You can find out more about categories in the Objective-C Programming Language guide at the ADC.

Daniel Tull
Thanks for the explanation and for the suggestion about categories!!One additional question: I've seen several examples where a custom property's get and set methods use will/didAccess/ChangeValueForKey around the access of self.primitiveSomeVariable. However, if I have an instance of the class in some other context and I access or set object1.someVariable, I don't use the ...ValueForKey methods, right?. SO, what's the difference? Why in code for a member property do you need to add the notifications? Do you have to do the same in ANY member method that uses the Data Model attribute?
FTLPhysicsGuy