2015-04-21 21 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"] 
    } 
}