我正在尝试使用主键更新领域对象。现在请记住,我不是更新主键,而只是更新那里的另一个字段。下面是我的对象:
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
}
}
我正在尝试更新&#34; bio&#34;对象的属性,但是我已经完成了
&#34;无法更新主键&#34;
的例外情况
现在,我真的不明白为什么我会被抛出这个错误 我没有更新对象中的主键。
额外说明:
我正在更新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
})
}
答案 0 :(得分:1)
我认为问题就在这一行
self.usercache.uid = uuid
因为self.usercache已经是一个Realm对象,所以当你更新它时,uid =&gt;它抛出异常。
不要重复使用self.usercache,而是尝试创建一个新的UserData对象