에러
메세지 삭제 시 RLMException: Object has been deleted or invalidated
에러 메세지가 나오면서 앱이 꺼지는 현상 발생
원인
메세지로그의 변화를 감지하기 위해 Realm의 observe
사용하고 있었다.
observe
에 짧게 알아 보자면
조금더 자세한 내용은 문서 참조
https://www.mongodb.com/docs/realm/sdk/swift/react-to-changes/
문서에서 컬렉션 변화에 감지하는 리스너를 등록이라고 설명되어 있다.
-> 컬렉션의 데이터 변경이 되면 호출되는 메서드 인 것 같다.
다시 돌아와서 메세지 삭제 시 해당 컬렉션의 데이터를 Realm 호출해 삭제 시키고 있는데 다시 한번더 해당 컬렉션의 데이터를 참조? 값을 찾을려고 하니 에러가 나온 것 같다. 이미 삭제되었는데 말이다.
메세지 삭제 요청 -> Realm delete()로 삭제 -> observe
에서 데이터가 변경되었으니 해당 데이터 값을 가져오기 위해 조회
위의 순서대로 동작이 되어 에러가 발생되지 않았나 생각된다.
해결방법
observe
발생 이벤트 타입에 따라 처리하는 로직을 넣을 수 있다. initial
, update
이벤트는 총 2가지가 있는데 그 중 update
에 deletions
, insertions
, modifications
파라미터가 있는데 각 이벤트에 따라 이벤트 처리를 할 수 있다. 나의 경우 deletions
시 아무 것도 동작하지 않도록 설정을 해주니 에러가 생기지 않고 정상적으로 원하는 데이터만 삭제를 해주었다.
결국 발생한 이벤트에 대해 처리를 안해 발생한 문제였다...
'iOS > 트러블 슈팅' 카테고리의 다른 글
트러블슈팅) iOS. 무결성을 확인할 수 없기 떄문에 이 앱을 설치할 수 없습니다. (1) | 2023.11.23 |
---|---|
SwiftUI Core Data & Realm Preview crash 해결 (1) | 2023.10.18 |
Swift Lottie SPM 라이브러리 m1 다운로드 오류 (0) | 2023.09.04 |
Error: "Swinject: Resolution failed. Expected registration" (0) | 2023.08.17 |
"One or more media items failed..." 오류 (0) | 2023.07.31 |