Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best way to implement Enums with Core Data

What is the best way to bind Core Data entities to enum values so that I am able to assign a type property to the entity? In other words, I have an entity called Item with an itemType property that I want to be bound to an enum, what is the best way of going about this.

like image 720
Michael Gaylord Avatar asked Oct 26 '09 11:10

Michael Gaylord


1 Answers

You'll have to create custom accessors if you want to restrict the values to an enum. So, first you'd declare an enum, like so:

typedef enum {     kPaymentFrequencyOneOff = 0,     kPaymentFrequencyYearly = 1,     kPaymentFrequencyMonthly = 2,     kPaymentFrequencyWeekly = 3 } PaymentFrequency; 

Then, declare getters and setters for your property. It's a bad idea to override the existing ones, since the standard accessors expect an NSNumber object rather than a scalar type, and you'll run into trouble if anything in the bindings or KVO systems try and access your value.

- (PaymentFrequency)itemTypeRaw {     return (PaymentFrequency)[[self itemType] intValue]; }  - (void)setItemTypeRaw:(PaymentFrequency)type {     [self setItemType:[NSNumber numberWithInt:type]]; } 

Finally, you should implement + keyPathsForValuesAffecting<Key> so you get KVO notifications for itemTypeRaw when itemType changes.

+ (NSSet *)keyPathsForValuesAffectingItemTypeRaw {     return [NSSet setWithObject:@"itemType"]; } 
like image 128
iKenndac Avatar answered Sep 22 '22 18:09

iKenndac