방금 Realm을 사용하기 시작했고 한 가지를 제외하고는 매우 훌륭하고 빠르다고 느낍니다. Realm에서 객체를 삭제하면 쉽게 예외가 발생합니다.
Realm 안전에서 객체를 삭제할 수있는 방법이 있습니까?
내 프로젝트에서는 일반적으로 백그라운드 스레드에서 수백 개의 개체를 만들고 업데이트하고 삭제해야합니다. 문제는 다음과 같습니다.
Realm에 isInvalid 메서드가 있다는 것을 알고 있지만 모든 할당 속성 코드에 검사를 추가 할 수는 없습니다.보기에 좋지 않습니다.
그래서 지금 제가하는 일은 실제로 삭제하는 대신에 "deleted"라는 속성 호출이 있고 삭제시 해당 값만 업데이트하는 것입니다. 그리고 UI에서 delete = true 인 개체를 필터링합니다.
이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다.
이것은 의도 된 기능입니다. 백그라운드 스레드가 Realm을 삭제 Object
하면 다음에 스레드에서 해당 객체에 액세스하려고 할 때 예외가 발생합니다.
이를 처리하기 위해 Realm은 Realm 데이터베이스의 내용이 변경되었을 때 자동으로 알림을 받고 그에 따라 UI를 업데이트하는 데 사용할 수 있는 풍부한 알림 시스템 을 제공 합니다 .
단일 Realm의 내용을 표시하는 뷰 컨트롤러가있는 경우 Object
Realm 데이터베이스에 대한 변경 사항을 알리는 시스템을 구현 한 다음 객체가 여전히 유효한지 확인할 수 있습니다.
class MyViewController : UIViewController {
var myModel: Object = nil
var notificationToken: NotificationToken? = nil
init(model: Object) {
self.myModel = model
}
override fun viewDidLoad() {
super.viewDidLoad()
notificationToken = myModel.realm.addNotificationBlock { notification, realm in
guard myModel.invalidated == false else {
// The object has been deleted, so dismiss this view controller
}
}
}
deinit() {
notificationToken?.stop()
}
}
해당 알림 블록은 쓰기 트랜잭션이 특정 Realm 파일 (백그라운드 스레드에서도 가능)에서 무언가를 수정할 때마다 트리거 Object
되어 해당 UI 의 특정 Realm 이 삭제되지 않았 는지 확인할 수있는 기회를 제공합니다 . 그렇다면 UI를 간단히 닫을 수 있습니다.
특정 요구 사항에 따라 Objects
쿼리 결과의 일부인 Realm의 변경 사항을 구체적으로 추적하는 데 사용할 수있는보다 세분화 된 알림 시스템도 있습니다 . Realm 문서 의 Collection Notifications 에 샘플 코드가 있습니다.
추가 설명이 필요하면 알려주세요! :)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다