5
我的一個模型對象具有枚舉屬性。爲了將它存儲在CoreData中,我使用了一個NSNumber對象。在CoreData中存儲枚舉屬性並使其方便
儘管如此,我想以一種方便的方式作爲枚舉類型來訪問它。達到這個目標的最佳做法是什麼?
到目前爲止,我已經走了下面的代碼。
在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屬性?
很酷,我不知道這一點。不幸的是,我正在使用的應用程序必須支持iOS 4,至少在幾個月後。 – 2012-05-18 08:21:04