iOS/트러블 슈팅

Realm 채팅 앱 개발 중 메세지 삭제 에러

Brad_Heo 2023. 9. 10. 15:45

에러

메세지 삭제 시 RLMException: Object has been deleted or invalidated
에러 메세지가 나오면서 앱이 꺼지는 현상 발생

원인

메세지로그의 변화를 감지하기 위해 Realm의 observe 사용하고 있었다.

observe에 짧게 알아 보자면

스크린샷 2023-09-10 오후 3 31 44

조금더 자세한 내용은 문서 참조
https://www.mongodb.com/docs/realm/sdk/swift/react-to-changes/

문서에서 컬렉션 변화에 감지하는 리스너를 등록이라고 설명되어 있다.

-> 컬렉션의 데이터 변경이 되면 호출되는 메서드 인 것 같다.

다시 돌아와서 메세지 삭제 시 해당 컬렉션의 데이터를 Realm 호출해 삭제 시키고 있는데 다시 한번더 해당 컬렉션의 데이터를 참조? 값을 찾을려고 하니 에러가 나온 것 같다. 이미 삭제되었는데 말이다.

메세지 삭제 요청 -> Realm delete()로 삭제 -> observe에서 데이터가 변경되었으니 해당 데이터 값을 가져오기 위해 조회

위의 순서대로 동작이 되어 에러가 발생되지 않았나 생각된다.

해결방법

observe 발생 이벤트 타입에 따라 처리하는 로직을 넣을 수 있다. initial, update 이벤트는 총 2가지가 있는데 그 중 updatedeletions, insertions, modifications 파라미터가 있는데 각 이벤트에 따라 이벤트 처리를 할 수 있다. 나의 경우 deletions 시 아무 것도 동작하지 않도록 설정을 해주니 에러가 생기지 않고 정상적으로 원하는 데이터만 삭제를 해주었다.

결국 발생한 이벤트에 대해 처리를 안해 발생한 문제였다...