Filipe Fragoso
Filipe Fragoso

Reputation: 1

Realm crash when try to deleting children Objects of type Object

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

Answers (1)

Thomas Goyne
Thomas Goyne

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

Related Questions