I have some NSManagedObjects and I would like to write methods for sorting and comparing the properties on them.
My problem is that since Core Data defines the properties as @dynamic they can not be referenced at compile time. This means that decorating an NSManagedObject with methods like this:
- (NSComparisonResult) compareDateAndTime:(Event *) event {
return [originDate compare:[event originDate]];
}
will result in the compiler not being able to locate a property called “originDate”.
The above method is called like this:
NSArray *events = [[NSArray alloc]
initWithArray:[unsortedEvents sortedArrayUsingSelector:@selector(compareDateAndTime:)]];
I could go with predicates or fetchedResultController, but I would like to build these as
methods myself as I have an identical NSObjects for each NSManagedObject. This NSObject acts as a temp object that is passed around and populated before it’s properties are set on the NSManagedObject that is then persisted. I also have some other functions, like specialized accessors, I would like to add to the NSManagedObject.
**(1)**Is there a general/best practice way of decorating NSManagedObjects with methods and functions **(2)**and have Xcode not overwrite them when “re-building” a class for an Entity?
Thank you for any help or “RTFM” given:)
I re-generate the model classes for my entities fairly often, so I added support methods (including implementations of getters for transient properties) as “Support” categories on the model classes.
I don’t ever have to modify the model class files and there is no way I could accidentally overwrite my additional methods.
For example, a “Place” entity might have a name string and latitude/longitude numbers. It also could have a transient property for the first letter of the name. This can be used as the section name key path for section index titles in a large table view.
Xcode will generate the class files for the “Place” entity like this:
Place.h:
Place.m:
I create a “Support” category on the “Place” class.
PlaceSupport.h:
and implement it in PlaceSupport.m