モデル オブジェクトの 1 つに enum プロパティがあります。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 に変換するときに使用する適切な型はありますか?-(enum)enumValue;
(NSNumber はメソッドを提供しません)- 検証の側面はランタイム CoreData モデルの検証に任せますか?
- [NEW] NSNumber プロパティではなく、便利なプロパティを使用する必要があることを他の開発者に明確にするにはどうすればよいですか?