使用核心数据实现枚举的最佳方式?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

将Core Data实体绑定到枚举值的最佳方式是什么,以便我能够为实体指定一个类型属性?换句话说,我有一个名为实体ItemitemType,我想绑定到一个枚举属性,什么是要对这个的最佳方式。

提问于
用户回答回答于

如果要将值限制为枚举,则必须创建自定义访问器。所以,首先你要声明一个枚举,就像这样:

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"];
}
用户回答回答于

你可以这样做,更简单:

typedef enum Types_e : int16_t {
    TypeA = 0,
    TypeB = 1,
} Types_t;

@property (nonatomic) Types_t itemType;

在你的模型中,设置itemType为16位数字。全做完了。无需额外的代码。只需放入你的平时

@dynamic itemType;

如果你使用Xcode创建你的NSManagedObject子类,请确保选中“ 使用基元数据类型的标量属性 ”设置。

扫码关注云+社区