Một trong các đối tượng mô hình của tôi có một thuộc tính enum. Để lưu trữ nó trong CoreData, tôi đã sử dụng một đối tượng NSNumber.Lưu trữ một thuộc tính enum bên trong CoreData và làm cho nó thuận tiện
Tuy nhiên, tôi muốn truy cập nó dưới dạng kiểu enum một cách thuận tiện. Thực hành tốt nhất để đạt được điều đó là gì?
Cho đến giờ, tôi đã đi với mã sau.
trong 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;
trong 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];
}
}
Câu hỏi của tôi là:
- Có điều gì sai trong đoạn code trên?
- Có phải
int
loại quyền sử dụng khi chuyển đổi enum thành NSNumber? (NSNumber không cung cấp phương thức-(enum)enumValue;
) - Bạn có để lại khía cạnh xác thực cho xác thực mô hình CoreData thời gian chạy không?
- [MỚI] Làm cách nào để tôi có thể làm rõ cho các nhà phát triển khác rằng nên sử dụng thuộc tính tiện lợi chứ không phải thuộc tính NSNumber?
Tuyệt, tôi không biết điều này. Rất tiếc, các ứng dụng tôi đang làm việc phải hỗ trợ iOS 4, ít nhất là trong vài tháng nữa. –