更新具有主键的领域对象

阿卡什·戴夫(Aakash Dave)

我正在尝试使用主键更新领域对象。现在请记住,我不是在更新主键,而只是在其中更新另一个字段。以下是我的对象:

class UserData : Object {

@objc dynamic var name: String? = nil
@objc dynamic var bio: String? = nil
@objc dynamic var username: String? = nil
@objc dynamic var phone: String? = nil
@objc dynamic var uid : String? = nil
@objc dynamic var imageL: Data? = nil

override static func primaryKey() -> String {
    return "uid"
}

}

extension UserData {


func writeToRealm(){
    try? RealmService.uirealm.realm.write {
        RealmService.uirealm.realm.add(self, update: true)
    }
}

func DeleteFromRealm(object: Results<UserData>){
    try? RealmService.uirealm.realm.write {
        RealmService.uirealm.realm.delete(object)
    }
}

}

这就是我在程序中实例化领域服务的方式:

class RealmService {

static let uirealm = RealmService()

private var _initRS = try! Realm()

var realm: Realm! {
    return _initRS
}
}

我正在尝试更新对象的“生物”属性,但连续被赋予了

“无法更新主键”的异常

现在,即使我没有更新对象中的主键,我也真的不明白为什么会抛出此错误。

附加说明:

我正在对Firebase实例的每个可观察到的更改中更新领域对象。所以这是我遇到问题的领域。因为每次发生更改时,只有一个写域实例。

相同的代码:

FBDataservice.ds.REF_USERS.child(uuid).observe(.value, with: { (snapshot) in
        if snapshot.hasChild("credentials") {
            if let snap = snapshot.value as? Dictionary<String, Any> {
                if let cred = snap["credentials"] as? Dictionary<String, Any> {

                    let u = User(userid: uuid, userData: cred)
                    self.usercache.uid = uuid
                    self.usercache.bio = u.aboutme
                    self.usercache.writeToRealm()
                }
            }
        }
//            RealmService.uirealm.realm.refresh() ------> No sure about this
    })
}
phapli

我认为这是问题所在

self.usercache.uid = uuid

因为self.usercache已经是Realm对象,所以当您更新它的uid =>时,它将引发异常。

代替重用self.usercache,尝试创建一个新的UserData对象

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章