首页 文章

更新对象时保留Realm属性值

提问于
浏览
0

我正在开发一个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"
  }
}

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

Query 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()

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

1 回答

  • 1

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

相关问题