我正在开发一个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。我怎么能避免这个?
答案 0 :(得分:1)
简短的回答是,通过将Object
子类的实例传递给Realm.add(_:update:)
,无法执行对象的部分更新。原因是没有办法为Object
子类上的属性表示不更新此属性。相反,您希望将字典传递给Realm.create(_:value:update:)
,其中缺少给定键表示不会更新此属性。