Swift Realm меняет только одно значение объекта - PullRequest
0 голосов
/ 27 мая 2018
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)")
     }

   }

Но если я сделаю это, как вы можете видетьв моем решении для желания у меня всегда есть попытка изменить объект вне ошибки транзакции записи.

Я попытался создать новый объект полностью и использовать идентификатор объекта, который я хочу изменить.Это работает, но потребуется еще больше строк кода.

1 Ответ

0 голосов
/ 04 июня 2018

Вы можете использовать KVO для обновления одного значения в объекте области

как вызывать

    let user = getUser()
    self.update(ofType:user, value: Date().timeIntervalSince1970 as AnyObject, key: "dateLastStart")

Функцию помощника

  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
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...