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?