RLMObject属性NSDecimalNumber

时间:2015-04-21 01:30:45

标签: ios swift realm

据我所知,RLMObjects无法存储NSDecimalNumber。为了解决这个问题,我尝试了以下方法,但失败了:

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

我收到失败声明RLMObjects无法存储NSDecimalNumbers。我的印象是非动态属性不会存储在Realm

1 个答案:

答案 0 :(得分: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,因此无法在Realm中保留。如果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"]
    }
}