I'm receiving an RLMException
for the following reason:
Attempting to create an object of type 'Student' with an existing primary key value '258975085-504336622-62850'.
The confusing part is that it's occurring just after a check that there are no existing objects with this key in the Realm.
let realm = try Realm()
if let info = realm.object(ofType: Student.self, forPrimaryKey: newStudent.userId) {
try realm.write {
info.name = newStudent.name
info.school = newStudent.school
info.email = newStudent.email
}
}
else {
try realm.write {
realm.add(newStudent) //RLMException occurs here
}
}
This code is all running asynchronously on the GCD utility queue, inside a do/catch block. It's triggered by a button in the user interface, but nothing else is accessing realm at the same time.
Why could that if statement allow the else code to run?
In my case, I added condition to check whenever new user logs in:
if newStudent == nil{
self.realm.add(newStudent, update: .all)
}
try! self.realm.write {
self.realm.add(newStudent, update: true)
}
You're adding same Object (student) with existing primary key. So you can just update current one. Instead of deleting and adding new one.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With