SwiftUI의 Realm
데이터 삭제를 하는 과정에서 자꾸 해당 에러가 발생하였다.. 🤯
Terminating app due to uncaught exception 'RLMException', reason: 'Object has been deleted or invalidated.'
디버깅과 구글링으로 에러 해결방법을 찾아서 여러 방법을 시도하였고,
약 4시간의 시도 끝에 해결했다..!!! 😝✌🏻
해결의 힌트는 여기서 얻었다 ㅎㅎ (감사룽 ~~)
먼저, Realm Data를 삭제하는 코드이다.
Place class의 primary key
에 해당하는 id
를 기준으로 쿼리문을 실행하고,
일치하는 데이터를 Realm DB에서 삭제하는 매커니즘이다.
func deletePlaceData() {
let predicate = NSPredicate(format: "id == %@", place.id as CVarArg)
if let filteredData = realm.objects(Place.self).filter(predicate).first {
try! realm.write{
realm.delete(filteredData)
}
}
}
위 함수를 정의하는 class 코드는 대략 다음과 같다.
final class PlaceDetailViewModel: ObservableObject {
@Published var places: Binding<[Place]>
@Published var place: Place
init(places: Binding<[Place]>, place: Place) {
self.places = places
self.place = place
}
}
📌 Realm에서 Data를 삭제하는 것에는 문제가 없지만,
삭제한 후에 삭제된 place
instance에 접근하는 것이 문제이다.
deletePlaceData()
함수에 place instance를 초기화하는 코드를 추가하였다.
place = Place()
이제 에러 없이 Realm Data 삭제가 성공적으로 이루어진다! 🥳