首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用核心数据实现枚举的最佳方法

使用核心数据实现枚举的最佳方法
EN

Stack Overflow用户
提问于 2009-10-26 19:28:48
回答 6查看 21.6K关注 0票数 109

将核心数据实体绑定到枚举值的最佳方式是什么,以便我能够将类型属性分配给实体?换句话说,我有一个名为Item的实体,它有一个itemType属性,我希望将它绑定到一个枚举,最好的方法是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-26 19:45:19

如果想要将值限制为枚举,则必须创建自定义访问器。因此,首先需要声明一个枚举,如下所示:

代码语言:javascript
复制
typedef enum {
    kPaymentFrequencyOneOff = 0,
    kPaymentFrequencyYearly = 1,
    kPaymentFrequencyMonthly = 2,
    kPaymentFrequencyWeekly = 3
} PaymentFrequency;

然后,为你的属性声明getter和setter。覆盖现有的访问器不是一个好主意,因为标准的访问器需要的是NSNumber对象而不是标量类型,如果绑定或KVO系统中的任何内容试图访问您的值,您就会遇到麻烦。

代码语言:javascript
复制
- (PaymentFrequency)itemTypeRaw {
    return (PaymentFrequency)[[self itemType] intValue];
}

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

最后,您应该实现+ keyPathsForValuesAffecting<Key>,以便在itemType更改时获得itemTypeRaw的KVO通知。

代码语言:javascript
复制
+ (NSSet *)keyPathsForValuesAffectingItemTypeRaw {
    return [NSSet setWithObject:@"itemType"];
}
票数 130
EN

Stack Overflow用户

发布于 2009-11-17 00:58:48

我正在考虑的另一种方法是根本不声明枚举,而是将值声明为NSNumber上的category方法。

票数 22
EN

Stack Overflow用户

发布于 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类型。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1624297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档