更新对象

问题描述:

我工作的一个斯威夫特3领域的应用时,我有这个境界的模型类保留域属性值:更新对象

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) 
} 

然后,当用户完成我更新特定用户在本地数据库领域的注册作为注册用户(isRegistered = true)。此值仅保存在本地数据库领域:

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

但我的问题是,当接收到新的服务器响应,我重新运行查询1isRegistered属性为假。我怎样才能避免这种情况?

+0

RealmOptional值可能是primaryKey? –

+0

是的,因为它是从我的远程服务器数据库相同的主键我只是在我的本地数据库相同。 –

简而言之,通过将Object子类的实例传递给Realm.add(_:update:)不能执行对象的部分更新。原因是没有办法代表不要更新此属性您的Object子类上的属性。您将想要将字典传递至Realm.create(_:value:update:),其中缺少给定键代表不会更新此属性

+0

谢谢你的解释。我试过这一个 uiRealm.create(User.self,值:[userName,userURL,userThumbnailURL,isRegistered,userID],update:true) 但是,当我删除isRegistered值时,我得到“数组索引超出范围“错误。 我该如何解决这个问题? –

+0

它工作。这是我的数组索引超出范围错误的错误。 非常感谢支持。 –