更新对象时保留Realm属性值

时间:2017-04-22 05:55:08

标签: ios swift swift3 realm

我正在开发一个Swift 3 Realm应用程序,我有这个Realm模型类:

class User: Object {
  dynamic var userName = ""
  dynamic var userURL = ""
  dynamic var userThumbnailURL = ""
  dynamic var isRegistered = false

  var userID = RealmOptional<Int>()

  override class func primaryKey() -> String? {
    return "userID"
  }
}

然后我按如下方式添加值。我从我的服务器上获取它们并将它们保存在本地数据库中:

查询1

let user = User()
user.userName = fields["userName"] as! String
user.userURL = fields["userURL"] as! String
user.userThumbnailURL = fields["userThumbnailURL"] as! String                    
user.userID.value = fields["userID"] as? Int
try! uiRealm.write {                   
  uiRealm.add(user, update: true)
}

然后,当用户完成注册时,我将本地Realm数据库中的特定用户更新为注册用户(isRegistered = true)。该值仅保存在本地Realm数据库中:

uiRealm.beginWrite()
let updatingUser = uiRealm.objects(User).filter("userID =  %d", self.userId)
let user = updatingUser.first
book?.isRegistered = true        
try! uiRealm.commitWrite()

但我的问题是,当收到新服务器响应并重新运行查询1 时,isRegistered属性将变为false。我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

简短的回答是,通过将Object子类的实例传递给Realm.add(_:update:),无法执行对象的部分更新。原因是没有办法为Object子类上的属性表示不更新此属性。相反,您希望将字典传递给Realm.create(_:value:update:),其中缺少给定键表示不会更新此属性