如何更改Realm单例属性值

时间:2016-07-28 06:34:01

标签: swift singleton realm

我有一个Realm对象:

class TransactionDB: Object {

    dynamic var transactionID : Int = -1
    dynamic var registrationPlate : String = ""
    dynamic var locationID : Int = 0
    dynamic var time : String = ""
    dynamic var subscription : String = ""
    dynamic var startTime : NSDate = NSDate() 
    dynamic var endTime : NSDate = NSDate()
    dynamic var status : Int = -2
    dynamic var requestType : Int = -1
    var extensions : List<ExtensionDB> = List<ExtensionDB>()
    dynamic var price : Double = 0
    dynamic var currency : String = ""
    private dynamic var test : Int = 10

    override static func primaryKey() -> String? {
        return "transactionID"
    }

    class var sharedInstance : TransactionDB {
        struct Singleton {
            static let instance = TransactionDB()
        }
        return Singleton.instance
    }

    static func saveOrUpdate {
        // ......
    }

和它的单例版本。因此,当屏幕改变时,我在许多控制器上有一个对象。 几天前我使用了一些较旧的Objective-C版本的Realm,但现在我改为仅使用Swift版本的1.0.2而且我正在尝试解决所有问题。

现在,当我尝试调用诸如此类的东西时,它就变成了一部分。

TransactionDB.sharedInstance.time = ""

我得到一个例外。但是,在我执行以下操作后,它可以工作:

let realm = try! Realm()
try! realm.write {
    TransactionDB.sharedInstance.time = ""
}

所以我创建单身人士是错的还是这就是必须要做的事情?因为,对我来说,当我想要更改某个属性的值时,我总是需要使用try块,这有点令人讨厌。

1 个答案:

答案 0 :(得分:1)

看一下Realm docs for the write section的第一行。

它声明:

  

对象的所有更改(添加,修改和删除)必须在写入事务中完成。

所以,这就是你必须要做的事情。