Realm에서 객체를 적절하고 스레드로부터 안전하게 삭제하는 방법

Tran Quan

방금 Realm을 사용하기 시작했고 한 가지를 제외하고는 매우 훌륭하고 빠르다고 느낍니다. Realm에서 객체를 삭제하면 쉽게 예외가 발생합니다.

Realm 안전에서 객체를 삭제할 수있는 방법이 있습니까?

내 프로젝트에서는 일반적으로 백그라운드 스레드에서 수백 개의 개체를 만들고 업데이트하고 삭제해야합니다. 문제는 다음과 같습니다.

  • 앱이 현재 메인 스레드에서 하나의 객체를 표시 / 사용하는 경우
  • 백그라운드에서 해당 개체를 삭제합니다. => 주 스레드에서 해당 개체의 속성을 사용할 때 예외가 발생합니다.

Realm에 isInvalid 메서드가 있다는 것을 알고 있지만 모든 할당 속성 코드에 검사를 추가 할 수는 없습니다.보기에 좋지 않습니다.

그래서 지금 제가하는 일은 실제로 삭제하는 대신에 "deleted"라는 속성 호출이 있고 삭제시 해당 값만 업데이트하는 것입니다. 그리고 UI에서 delete = true 인 개체를 필터링합니다.

이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다.

TiM

이것은 의도 된 기능입니다. 백그라운드 스레드가 Realm을 삭제 Object하면 다음에 스레드에서 해당 객체에 액세스하려고 할 때 예외가 발생합니다.

이를 처리하기 위해 Realm은 Realm 데이터베이스의 내용이 변경되었을 때 자동으로 알림을 받고 그에 따라 UI를 업데이트하는 데 사용할 수 있는 풍부한 알림 시스템제공 합니다 .

단일 Realm의 내용을 표시하는 뷰 컨트롤러가있는 경우 ObjectRealm 데이터베이스에 대한 변경 사항을 알리는 시스템을 구현 한 다음 객체가 여전히 유효한지 확인할 수 있습니다.

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

TTreeView에서 노드와 그 객체를 삭제하는 방법

python3 목록에서 스레드 객체를 삭제하는 방법

PostgreSQL: '고아' 레코드를 삭제하는 적절한 방법

typescript에서 객체 배열로 특정 객체를 삭제하는 방법

Realm Database Android에서 객체를 삭제하는 방법은 무엇입니까?

Realm : RLMArray에서 객체를 삭제하는 방법은 무엇입니까?

스레드로부터 안전하지 않음을 보여주기 위해 스레드간에 객체를 공유하는 방법은 무엇입니까?

TParallel. & For 루프에서 스레드로부터 안전한 객체의 데이터와 메서드를 사용하는 방법은 무엇입니까?

java.util.Date를 스레드로부터 안전하게 만드는 방법

rm 후 데이터를 안전하게 삭제하는 방법

Django에서 Model 필드를 안전하게 삭제할 수있는 안전한 방법이 있습니까?

한 스레드에서 다른 스레드로 변경 가능한 객체를 안전하게 게시하는 방법

한 스레드에서 다른 스레드로 변경 가능한 객체를 안전하게 게시하는 방법

안드로이드에서 객체를 복제하는 방법?

Java에서 Long 객체를 Long 프리미티브로 안전하게 변환하는 관용적 방법

sympy 객체를 안전하게 저장하고로드하는 방법

자바에서 모든 객체 포인터를 삭제하는 방법

Swift에서 영역에서 객체를 삭제하는 방법

데이터 구조를 스레드로부터 안전하게 만드는 가장 효율적인 방법 (Java)

JavaScript 객체에서 스프레드 연산자 전체를 동적으로 제거하는 방법

Python-스레드를 스레드로부터 안전하게 만드는 방법

Javascript의 JSON 파일에서 객체를 삭제하는 방법

mongoDB에서 객체 내부의 객체를 삭제하는 방법은 무엇입니까? 파이썬

일반적으로 공유되는 객체에 대한 액세스를 스레드로부터 안전하게 만들 수있는 방법은 무엇입니까?

여러 go 루틴에서 데이터를 퍼널하는 스레드로부터 안전한 방법

angularjs로 JSON 객체에서 항목을 삭제하는 방법

RealmList를 속성으로 포함하고 동일한 객체를 참조하는 RealmList 객체가없는 Realm에서 객체를 딥 복사하는 방법

스레드로부터 안전한 객체에 래퍼를 사용하는 Python 스레딩

ASP.Net MVC에서 레코드를 삭제하는 안전한 방법

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관