Dir*_*nry 5 enums typedef core-data nsnumber ios
我的一个模型对象有一个枚举属性.为了将它存储在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;
Run Code Online (Sandbox Code Playgroud)
在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];
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
int将枚举转换为NSNumber时使用的是正确的类型吗?(NSNumber没有提供-(enum)enumValue;方法)iOS 5 中的 CoreData 支持原生整数类型,因此如果需要,您可以使用它来代替 NSNumber。
编辑
FWIW,编译器可以使枚举尽可能小,以满足其可能保存的值。当分配给 NSNumber 时,最好将枚举(int)myEnumValue 强制转换,因为它假定类型是您告诉它的确切大小。
| 归档时间: |
|
| 查看次数: |
2093 次 |
| 最近记录: |