我的模型对象之一具有枚举属性。要将其存储在 CoreData 中,我使用了 NSNumber 对象。
不过,我想以一种方便的方式将它作为枚举类型访问。实现这一目标的最佳实践是什么?
到目前为止,我已经使用了以下代码。
在 MyObject.h
typedef enum _ABType {
ABTypeUnknown,
ABTypeValue1,
...
ABTypeValueN
} ABType;
@interface MyObject : NSManagedObject
@property (nonatomic, retain) NSNumber * myPersistentEnum; // Defined in my Core Data model
@property (nonatomic) ABType myConvenientEnum;
在 MyObject.m
@dynamic myPersistentEnum;
- (BOOL)isValidEnumValue {
if (self.myPersistentEnum) {
int intValue = [self.type intValue];
if (intValue >= ABTypeValue1 && intValue <= ABTypeValueN) {
return YES;
}
}
ELog(@"Undefined enumValue %@", self.myPersistentEnum);
return NO;
}
- (ABType)myConvenientEnum {
if ([self isValidEnumValue]) {
return [self.type intValue];
}
return ABTypeUnknown;
}
- (void)setMyConvenientEnum:(ABType)enumValue {
NSNumber *oldValue = [self.myPersistentEnum retain];
self.myPersistentEnum = [NSNumber numberWithInt:enumValue];
if ([self isValidEnumValue]) {
[oldValue release];
} else {
self.myPersistentEnum = oldValue;
[oldValue release];
}
}
我的问题是:
- 上面的代码有问题吗?
int
将枚举转换为 NSNumber 时使用的类型是否正确?(NSNumber 不提供-(enum)enumValue;
方法)- 您会将验证方面留给运行时 CoreData 模型验证吗?
- [新] 如何向其他开发人员明确应该使用便捷属性而不是 NSNumber 属性?