1
我有一个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-only版本1.0.2,并试图解决所有问题。
所以,现在它来到了一部分,当我尝试调用这样的东西:
TransactionDB.sharedInstance.time = ""
我得到一个异常。但是,我这样做后,它的工作原理:
let realm = try! Realm()
try! realm.write {
TransactionDB.sharedInstance.time = ""
}
所以我在创造单错误或者这只是它必须做的方式?因为对我而言,当我想要更改某个属性的值时,我总是必须使用try
块,这有点令人讨厌。
我只是认为它可以在没有它的情况下工作,因为我不想将它写入数据库直到它完成。我已经想通了,我可能不得不创建临时类来获得这样的对象。 – schmru
直到什么完成?准备要更新的值的逻辑?只要将所有逻辑保存在事务处理块之外/之前,并且只需使用准备好的所有变量执行事务处理块即可。不要将您的应用程序逻辑与事务块混合。在交易区块内尽可能少地操作。 – solidcell
这就是我正在做的事情,我有一个从未写入数据库的共享对象实例,这样我就可以改变事情,并且在设置了所有事情时,我使用这些值创建了新对象并将其保存。但不知何故,一旦我设置了共享属性,我就无法在没有事务块的情况下更改它们。 – schmru