据我所知,RLMObjects无法存储NSDecimalNumber。为了解决这个问题,我尝试了以下方法,但失败了:
private dynamic var _amount: String = ""
public var amount: NSDecimalNumber {
get { return NSDecimalNumber(string: _amount) }
set { _amount = newValue.stringValue }
}
我收到失败声明RLMObjects无法存储NSDecimalNumbers。我的印象是非动态属性不会存储在Realm
中答案 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"]
}
}