将核心数据实体绑定到枚举值的最佳方式是什么,以便我能够将类型属性分配给实体?换句话说,我有一个名为Item
的实体,它有一个itemType
属性,我希望将它绑定到一个枚举,最好的方法是什么?
发布于 2009-10-26 19:45:19
如果想要将值限制为枚举,则必须创建自定义访问器。因此,首先需要声明一个枚举,如下所示:
typedef enum {
kPaymentFrequencyOneOff = 0,
kPaymentFrequencyYearly = 1,
kPaymentFrequencyMonthly = 2,
kPaymentFrequencyWeekly = 3
} PaymentFrequency;
然后,为你的属性声明getter和setter。覆盖现有的访问器不是一个好主意,因为标准的访问器需要的是NSNumber对象而不是标量类型,如果绑定或KVO系统中的任何内容试图访问您的值,您就会遇到麻烦。
- (PaymentFrequency)itemTypeRaw {
return (PaymentFrequency)[[self itemType] intValue];
}
- (void)setItemTypeRaw:(PaymentFrequency)type {
[self setItemType:[NSNumber numberWithInt:type]];
}
最后,您应该实现+ keyPathsForValuesAffecting<Key>
,以便在itemType更改时获得itemTypeRaw的KVO通知。
+ (NSSet *)keyPathsForValuesAffectingItemTypeRaw {
return [NSSet setWithObject:@"itemType"];
}
发布于 2009-11-17 00:58:48
我正在考虑的另一种方法是根本不声明枚举,而是将值声明为NSNumber上的category方法。
发布于 2014-08-31 01:17:09
如果你使用的是mogenerator,看看这个:https://github.com/rentzsch/mogenerator/wiki/Using-enums-as-types。您可以拥有一个名为itemType
的整数16属性,在用户信息中的attributeValueScalarType
值为Item
。然后,在实体的用户信息中,将additionalHeaderFileName
设置为定义Item
枚举的标头的名称。在生成头文件时,mogenerator会自动将属性设置为Item
类型。
https://stackoverflow.com/questions/1624297
复制相似问题