Reputation: 1
I Have one class UserObject(Object) that has one property of SessionObject(Object), and the SessionObject has properties of other Realm Objects(TestObject, NewObject). When I delete the children Objects and after that the parent Object successfully, the app crashes with Bad Access: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)
class UserObject: Object{
dynamic var uuid = ""
dynamic var username = ""
dynamic var session: SessionObject?
class SessionObject: Object{
dynamic var tokenType = ""
dynamic var refreshToken = ""
dynamic var test: TestObject?
dynamic var new: NewObject?
}
class TestObject: Object{
dynamic var test = ""
}
class NewObject: Object{
dynamic var test = ""
}
func deleteUser(){
guard let realm = self.realmInstance else{
return
}
guard let user = Array(realm.objects(UserObject.self)).first else{
return
}
do{
try realm.write {
if let session = user.session{
if let test = session.test{
realm.delete(test)
}
if let new = session.new{
realm.delete(new)
}
realm.delete(session)
}
realm.delete(user)
}
}catch{
}
}
Upvotes: 0
Views: 397
Reputation: 8138
You're running in to ARC naming conventions, which apply to dynamic
properties on Swift classes. Currently Realm does not generate accessor methods which conform to what ARC expects for specially-named methods, which results in objects being double-deleted when you have a property name starting with new
, copy
or mutableCopy
.
Upvotes: 3