2015-04-21 23 views
4

我知道RLMObjects不能存储NSDecimalNumber。为了解决这个问题,我尝试以下,但没有成功RLMObject属性NSDecimalNumber

private dynamic var _amount: String = "" 
    public var amount: NSDecimalNumber { 
    get { return NSDecimalNumber(string: _amount) } 
    set { _amount = newValue.stringValue } 
} 

我得到一个失败陈述RLMObjects不能存储NSDecimalNumbers。我的印象是,非动态属性不会存储在Realm中

回答

4

RLMObjects的任何属性必须是dynamic。所以amount: NSDecimalNumber属性应被定义为dynamic

象下面这样:

private dynamic var _amount: String = "" 

public dynamic var amount: NSDecimalNumber { 
    get { return NSDecimalNumber(string: _amount) } 
    set { _amount = newValue.stringValue } 
} 

和计算机性能不应该被坚持。 (当然,amount属性为NSDecimalNumber,所以它不能被境界坚持。如果amount属性将被保留,出现异常)

为了防止这种情况,你可以重写ignoredProperties()方法并返回"amount"为字符串数组。

override public class func ignoredProperties() -> [AnyObject]! { 
    return ["amount"] 
} 

基于以上,完整的类定义如下:

public class Product: RLMObject { 
    private dynamic var _amount: String = "" 

    public dynamic var amount: NSDecimalNumber { 
     get { return NSDecimalNumber(string: _amount) } 
     set { _amount = newValue.stringValue } 
    } 

    public override class func ignoredProperties() -> [String]! { 
     return ["amount"] 
    } 
}