class User: Object {
@objc dynamic var id = ""
@objc dynamic var dateFirstStart:TimeInterval = 0
//dates
@objc dynamic var dateLastStart:TimeInterval = 0
@objc dynamic var dateLastAppClose:TimeInterval = 0
@objc dynamic var dateLastDataUpdateCheck:TimeInterval = 0
@objc dynamic var dateLastFilesUpdateCheck:TimeInterval = 0
override class func primaryKey() -> String? {
return "id"
}
}
我真的必须为每个值创建一个函数来改变吗?像这样:
func updateUserDateFirstStart(date:Date){
do {
let realm = try Realm()
try realm.write {
let user = getUser()
user. dateLastStart = Date().timeIntervalSince1970
}
} catch let error as NSError {
print("ERROR \(error.localizedDescription)")
}
}
我想要的是像
let user = getUser()
user.dateLastStart = Date().timeIntervalSince1970
dataManager.updateUser(user)
在我的DataManager中:
func updateUser(user:User){
do {
let realm = try Realm()
try realm.write {
realm.add(user, update: true)
}
} catch let error as NSError {
print("ERROR \(error.localizedDescription)")
}
}
但如果我这样做,你可以在我的愿望解决方案中看到,我总是尝试在写入事务错误之外修改对象。
我尝试创建一个完整的新Object并使用我想要更改的对象的id。这有效,但需要更多代码。
答案 0 :(得分:0)
您可以使用KVO更新领域对象中的一个值
如何致电
let user = getUser()
self.update(ofType:user, value: Date().timeIntervalSince1970 as AnyObject, key: "dateLastStart")
Helper func
func update(ofType:Object,value:AnyObject,key:String)->Bool{
do {
let realm = try Realm()
try realm.write {
ofType.setValue(value, forKeyPath: key)
}
return true
}catch let error as NSError {
fatalError(error.localizedDescription)
}
return false
}