ios - 在 CoreData 中存储枚举属性并使其方便

标签 ios core-data enums typedef nsnumber

我的模型对象之一具有枚举属性。为了将它存储在 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 属性?

最佳答案

iOS 5 中的 CoreData 支持原生整数类型,因此您可以根据需要使用它代替 NSNumber。

编辑

FWIW,编译器可以使 enum 尽可能小,因为它包含可能的值。最好在分配给 NSNumber 时转换枚举——(int)myEnumValue——因为它假定类型是你告诉它的确切大小。

关于ios - 在 CoreData 中存储枚举属性并使其方便,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032852/

相关文章:

ios - 如何在 swift 中将间隔值添加到 UIDatePicker 中

ios - Swift:如何更新可变形对象

iphone - 两个托管对象上下文可以共享一个持久存储协调器吗?

typescript - 将枚举值映射到类型

ios - OpenGL ES 1.1 会在 iOS 中过时吗?

ios - 如何使用 Scene Kit 每帧运行一段代码?

ios - iPad 文本输入和文本选择无法正常工作

ios - 如何测试 Core Data SQLite 文件是否加密?

java - 如何创建一个方法来接受并返回任何类型的 ObjectProperty<?>?

c# - Linq 包含枚举数组