Swift Realm只更改一个对象值

时间:2018-05-27 16:17:46

标签: swift realm

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。这有效,但需要更多代码。

1 个答案:

答案 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
        }