【问题标题】:Using enum as property of Realm model ios objective-c使用枚举作为 Realm 模型 ios Objective-c 的属性
【发布时间】:2017-05-18 10:14:24
【问题描述】:

是否可以将枚举用作我的模型的属性?我目前有这样的课程:

typedef NS_ENUM(NSUInteger, ListType) {
  ListTypeDay,
  ListTypeWeek,
  ListTypeMonth,
  ListTypeYear,
  ListTypeCustom
};

@interface ListItem : RLMObject;

@property (nonatomic, copy) NSString *title;
@property (nonatomic, assign) ListType itemType;
@property (nonatomic, assign) BOOL isFinish;
@property (nonatomic, assign) NSTimeInterval targetTime;

@end

RLM_ARRAY_TYPE(ListItem)

终端输出:

由于未捕获的异常“RLMException”而终止应用程序,原因:“无法使用不兼容的类型保留属性“itemType”。添加到被忽略的PropertyNames:要忽略的方法。'

【问题讨论】:

    标签: ios objective-c database realm


    【解决方案1】:

    不,您不能在 Realm 中存储自定义类型(包括枚举)。请参阅文档中的Supported Types

    Realm 支持以下属性类型:BOOL、bool、int、NSInteger、long、long long、float、double、NSString、NSDate、NSData 和 NSNumber 标记为特定类型。

    【讨论】:

    • 你能给出一个在objective c中添加枚举的代码示例吗?
    • 您可以将枚举的原始值存储在 Realm 中,然后从原始值再次创建枚举实例。遗憾的是,我已经有一段时间没有编写任何 Obj C 了,但是如果您仍然无法弄清楚这一点,我可以给您一个 Swift 示例代码。
    • 感谢关注,不过我可以用swift写出来……但实际上在目标c中遇到了一些问题……stackoverflow.com/q/44496642/6402959
    • 你得到的那个错误很清楚,和我的回答一样。您仍在尝试在 Realm 中存储枚举类型,目前尚不支持。
    • rawValue 的类型是 NSInteger。但是枚举的类型是enum YourEnumName。枚举不是原始类型,所以如果你创建一个枚举,你也会为它创建一个新类型。
    【解决方案2】:

    只需在类型定义中将 NSUInteger 替换为 NSInteger。

    typedef NS_ENUM(NSInteger, ListType) 
    

    【讨论】:

      猜你喜欢
      • 2010-12-10
      • 2015-05-21
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多