如何将枚举添加到领域模型? RLMObject?

时间:2017-06-12 10:00:09

标签: ios objective-c enums crash realm

这是我的serviceModel.h

typedef NS_ENUM(NSInteger, OKServiceType) {
    OKServiceTypePending = 0,
    OKServiceTypeAccepted ,
    OKServiceTypeStarted,
    OKServiceTypeCompleted,
    OKServiceTypeClosed,
    OKServiceTypeCancelled
};
@interface serviceModel : RLMObject
@property NSString *job_id;
@property NSString *job_service_id;
@property NSString *service_id;
@property NSString *vendor_id;
@property NSString *timeslot;
@property NSString *points;
@property OKServiceType *status;
@property NSString *service_name;
@property NSString *image_url;
@property NSString *vendor_name;
@property NSString *subservice_desc;
@property NSString *subservice_id;
@property NSString *display_datetime;
@property NSString *status_text;
@end

RLM_ARRAY_TYPE(serviceModel)

我知道我们可以将属性类型添加为These。但我无法找到正确的方法将枚举添加到我的模型中,因为领域仅在启动时收集所有模型,因此它会因此而崩溃

@property OKServiceType *status;

我正在崩溃

  

错误错误域= NSCocoaErrorDomain代码= 3010“模拟器中不支持远程通知”

     

UserInfo = {NSLocalizedDescription =远程通知不是   在模拟器中支持} 2017-06-12 15:20:41.049 AppName [9974:157085]

     

***因未捕获的异常“RLMException”而终止应用程序,原因是:'无法使用不兼容的类型保持属性'状态'。添加   ignoredPropertyNames:忽略的方法。'

任何帮助都会受到赞赏..

2 个答案:

答案 0 :(得分:2)

也许您希望将属性存储为NSInteger,这是一种受支持的类型,并创建一个方法,将整数值作为OKServiceType类型的枚举返回。

@property NSInteger statusInt;

- (OKServiceType)status {
    return (OKServiceType)statusInt
}

- (void)setStatus(OKServiceType)status {
    self.statusInt = status
}

答案 1 :(得分:1)

另一种方法是将枚举属性设置为(只读)。 Realm会自动忽略只读属性,然后您可以使用自定义setter。例如:

@property (readonly) OKServiceType *status;
@property NSInteger statusInt;

@implementation ServiceModel

- (OKServiceType)status {
    return (OKServiceType)_statusInt;
}

@end