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